Rumah  >  Artikel  >  pangkalan data  >  Bolehkah mysql mencipta indeks bersama?

Bolehkah mysql mencipta indeks bersama?

青灯夜游
青灯夜游asal
2022-06-15 16:22:425929semak imbas

mysql boleh mencipta indeks bersama. MySQL membenarkan pengguna membuat indeks bersama yang mengandungi sehingga 16 lajur Terdapat dua kaedah penciptaan: 1. Cipta semasa membuat jadual Sintaks "CREATE TABLE nama jadual (nama lajur 1 jenis PRIMARY KEY, nama lajur 2 jenis, nama lajur. 3 jenis, ...nama indeks INDEKS (nama lajur 2, nama lajur 3...));"; 2. Cipta semasa mengubah suai jadual, sintaks "BUAT nama indeks INDEX PADA nama jadual (nama lajur 2, nama lajur 3, nama lajur 4);".

Bolehkah mysql mencipta indeks bersama?

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Apakah indeks bersama? Intipati indeks bersama: Padanan paling kiri

Indeks pada dua atau lebih lajur dipanggil indeks bersama, dan indeks gabungan juga dipanggil indeks komposit. MySQL membenarkan pengguna mencipta indeks komposit yang mengandungi sehingga 16 lajur.

Untuk indeks kompaun: Mysql menggunakan medan dalam indeks dari kiri ke kanan Pertanyaan hanya boleh menggunakan sebahagian daripada indeks, tetapi hanya bahagian paling kiri.

Sebagai contoh, indeks ialah key index (a,b,c) Ia boleh menyokong 3 kombinasi a, b, c untuk carian, tetapi tidak menyokong b, c untuk medan paling kiri adalah rujukan yang berterusan, indeksnya sangat berkesan.

Pengoptimum pertanyaan menggunakan indeks komposit untuk pertanyaan yang menguji semua lajur dalam indeks, atau pertanyaan yang menguji lajur pertama, dua lajur pertama, dsb.

Satu indeks komposit boleh mempercepatkan jenis pertanyaan ini pada jadual yang sama jika lajur dinyatakan dalam susunan yang betul dalam definisi indeks.

Cipta indeks kesatuan apabila mencipta jadual

Sintaks:

CREATE TABLE 表名 (
    c1 data_type PRIMARY KEY,
    c2 data_type,
    c3 data_type,
    c4 data_type,
    INDEX 索引名 (c2,c3,c4)
);

Dalam sintaks ini, indeks kesatuan terdiri daripada tiga lajur c2, komposisi c3 dan c4.

Buat indeks komposit apabila mengubah suai jadual

Indeks komposit boleh ditambah pada jadual sedia ada menggunakan pernyataan CREATE INDEX berikut:

CREATE INDEX 索引名 
ON 表名(c2,c3,c4);

Sila ambil perhatian, jika anda mempunyai indeks komposit pada (c1, c2, c3), anda akan mempunyai fungsi carian indeks pada salah satu gabungan berikut:

(c1)
(c1,c2)
(c1,c2,c3)

Contohnya:

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1;
 
 
SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2;
 
 
SELECT  
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2 AND 
    c3 = v3;

Jika lajur tidak membentuk awalan paling kiri indeks, pengoptimum pertanyaan tidak boleh melakukan carian menggunakan indeks. Sebagai contoh, pertanyaan berikut tidak boleh ditemui menggunakan komposit:

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c3 = v3;

Contoh Indeks Kesatuan MySQL

Kami akan menggunakan jadual pekerja dari pangkalan data contoh Berikan pembentangan.

Bolehkah mysql mencipta indeks bersama?

Pernyataan berikut mencipta indeks bersama pada lajur Nama akhir dan nama pertama:

CREATE INDEX name 
ON employees(lastName, firstName);
  • Pertama, indeks nama boleh digunakan untuk menentukan nilai LastName dalam pertanyaan kerana lajur LastName ialah awalan paling kiri bagi indeks.

  • Kedua, indeks nama boleh digunakan untuk menanyakan nilai gabungan nilai LastName dan FirstName.

indeks nama digunakan untuk mencari dalam pertanyaan berikut:

1) Cari pekerja yang nama belakangnya ialah Patterson

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';

Pertanyaan ini menggunakan nama index , kerana awalan paling kiri indeks (iaitu lajur LastName) digunakan untuk carian.

Anda boleh mengesahkan ini dengan menambahkan klausa pada pertanyaan melalui EXPLAIN:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';

Ini ialah output:

Bolehkah mysql mencipta indeks bersama?

2 ) Cari pekerja dengan nama keluarga Patterson dan nama pertama Steve:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';

Dalam pertanyaan ini, kedua-dua lajur LastName dan firstName digunakan untuk carian, oleh itu, ia menggunakan indeks nama.

Mari kita lihat:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';

Keluarannya ialah:

Bolehkah mysql mencipta indeks bersama?

3) Cari pekerja yang nama keluarganya ialah Patterson dan yang pertama nama ialah Steve atau Mary:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');

Pertanyaan ini serupa dengan pertanyaan kedua, di mana kedua-dua lajur LastName dan firstName digunakan untuk carian.

Pernyataan berikut mengesahkan penggunaan indeks:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');

Outputnya ialah:

Bolehkah mysql mencipta indeks bersama?

Pengoptimum pertanyaan tidak boleh menggunakan indeks nama dalam pertanyaan berikut Carian dilakukan kerana hanya lajur yang Nama pertamanya bukan awalan paling kiri indeks digunakan:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Leslie';

Begitu juga, pengoptimum pertanyaan tidak boleh menggunakan indeks nama untuk carian dalam pertanyaan berikut kerana lajur firstName atau lastName digunakan untuk carian .

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Anthony' OR
    lastName = 'Steve';

[Cadangan berkaitan: tutorial video mysql]

Atas ialah kandungan terperinci Bolehkah mysql mencipta indeks bersama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn