Bolehkah mysql mencipta indeks bersama?

青灯夜游
Lepaskan: 2022-06-15 16:22:42
asal
5946 orang telah melayarinya

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)
);
Salin selepas log masuk

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);
Salin selepas log masuk

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)
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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);
Salin selepas log masuk
  • 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';
Salin selepas log masuk

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';
Salin selepas log masuk

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';
Salin selepas log masuk

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';
Salin selepas log masuk

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');
Salin selepas log masuk

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');
Salin selepas log masuk

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';
Salin selepas log masuk

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';
Salin selepas log masuk

[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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan