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);".
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.
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:
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:
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:
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!