Indeks digunakan untuk mencari baris dengan cepat yang mempunyai nilai tertentu dalam lajur.
Tanpa menggunakan indeks, MySQL mesti bermula pada rekod 1 dan kemudian membaca keseluruhan jadual sehingga ia menemui baris yang berkaitan. Lebih besar meja, lebih banyak masa yang diperlukan. Jika lajur yang ditanya dalam jadual mempunyai indeks, MySQL boleh sampai ke titik di mana ia mencari bahagian tengah fail data tanpa perlu melihat semua data.
Sudah tentu, bukan mudah untuk mempunyai terlalu banyak indeks Semakin banyak indeks ditulis, semakin perlahan kelajuan pengubahsuaian. Kerana apabila menulis data yang diubah suai, indeks juga mesti diubah suai.
Indeks dibahagikan kepada indeks berkelompok dan indeks tidak berkelompok disusun mengikut lokasi fizikal penyimpanan data, tetapi indeks tidak berkelompok boleh meningkatkan banyak Kepantasan pengambilan baris, manakala indeks bukan berkelompok adalah pantas untuk mendapatkan satu baris.
Indeks biasa < . .
– buat indeks terus
CREATE INDEX index_name ON table(column(length)) –修改表结构的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) –创建表的时候同时创建索引 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length)) )
– padam indeks
DROP INDEX index_name ON table
2. Indeks unik adalah serupa dengan indeks biasa, kecuali nilai lajur indeks mestilah unik, tetapi nilai nol dibenarkan (perhatikan bahawa dan kunci utama adalah berbeza). Jika ia adalah indeks gabungan, gabungan nilai lajur mestilah unik, dan kaedah penciptaan adalah serupa dengan indeks biasa.
–创建唯一索引 CREATE UNIQUE INDEX indexName ON table(column(length)) –修改表结构 ALTER TABLE table_name ADD UNIQUE indexName ON (column(length)) –创建表的时候直接指定 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), UNIQUE indexName (title(length)) );
3. Indeks teks penuh (FULLTEXT) MySQL menyokong pengindeksan teks penuh dan perolehan semula teks penuh bermula dari versi 3.23. 23. Indeks FULLTEXT hanya tersedia Untuk jadual MyISAM; ia boleh dibuat daripada lajur CHAR, VARCHAR atau TEXT sebagai sebahagian daripada kenyataan CREATE TABLE, atau ditambah kemudian menggunakan ALTER TABLE atau CREATE INDEX. ////Untuk set data yang lebih besar, memasukkan data anda ke dalam jadual tanpa indeks FULLTEXT dan kemudian mencipta indeks adalah lebih pantas daripada memasukkan data ke dalam indeks FULLTEXT sedia ada. Walau bagaimanapun, ingat bahawa untuk jadual data berkapasiti besar, menjana indeks teks penuh adalah proses yang sangat memakan masa dan memakan ruang cakera keras.
– Buat jadual yang sesuai untuk menambah indeks teks penuh
CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), FULLTEXT (content) );
ALTER TABLE article ADD FULLTEXT index_content(content)
CREATE FULLTEXT INDEX index_content ON article(content)
Kesan pertanyaan. daripada berbilang indeks lajur tunggal dan indeks berbilang lajur tunggal adalah berbeza, kerana pelaksanaan Apabila membuat pertanyaan, MySQL hanya boleh menggunakan satu indeks dan akan memilih indeks yang paling terhad daripada berbilang indeks.
5. Indeks gabungan (awalan paling kiri)
Pernyataan pertanyaan SQL yang biasa digunakan secara amnya mempunyai banyak sekatan, jadi untuk memerah lagi kecekapan MySQL, adalah perlu untuk mempertimbangkan untuk mewujudkan indeks gabungan. Sebagai contoh, dalam jadual di atas, indeks gabungan dicipta untuk tajuk dan masa: ALTER JADUAL artikel TAMBAH INDEX index_titme_time (tajuk(50), masa(10)). Menubuhkan indeks gabungan sedemikian sebenarnya bersamaan dengan menubuhkan dua set indeks gabungan berikut:
–tajuk, masa
–tajuk
Mengapa tidak ada indeks gabungan seperti masa ? kain bulu? Ini adalah hasil daripada "awalan paling kiri" indeks komposit MySQL. Pemahaman mudah ialah hanya memulakan gabungan dari yang paling kiri. Bukan sahaja pertanyaan yang mengandungi dua lajur ini akan menggunakan indeks gabungan, seperti yang ditunjukkan dalam SQL berikut:
–gunakan indeks di atas
SELECT * FROM article WHREE title='测试' AND time=1234567890; SELECT * FROM article WHREE utitle='测试';
– jangan gunakan indeks di atas
SELECT * FROM article WHREE time=1234567890;