(1) Meningkatkan kecekapan pertanyaan (mengurangkan penggunaan IO)
(2) Mengurangkan Penggunaan CPU kadar
Contohnya, menanyakan tertib mengikut umur, kerana pokok indeks B+ itu sendiri diisih, jadi jika indeks dicetuskan oleh pertanyaan, tidak perlu bertanya lagi.
(1) Indeks itu sendiri besar dan boleh disimpan dalam memori atau pada cakera keras, biasanya pada cakera keras.
(2) Indeks tidak digunakan dalam semua situasi, seperti ① sejumlah kecil data ② medan yang kerap bertukar ③ medan yang jarang digunakan
(3) Indeks akan mengurangkan kecekapan penambahan, pemadaman dan pengubahsuaian
(1) Indeks nilai tunggal
(2) Indeks unik
(. 3) Indeks bersama
(4) Indeks kunci utama
Nota: Satu-satunya perbezaan antara indeks unik dan indeks kunci primer: indeks kunci primer tidak boleh batal
alter table user add INDEX `user_index_username_password` (`username`,`password`)
Struktur data asas indeks MySQL ialah B+. Tree
B+Tree berada dalam B - Pengoptimuman berdasarkan Tree, menjadikannya lebih sesuai untuk melaksanakan struktur indeks storan luaran Enjin storan InnoDB menggunakan B+Tree untuk melaksanakan struktur indeksnya.
Setiap nod dalam rajah struktur B-Tree mengandungi bukan sahaja nilai utama data, tetapi juga nilai data. Ruang storan setiap halaman adalah terhad Jika data data adalah besar, bilangan kunci yang boleh disimpan dalam setiap nod (iaitu satu halaman) akan menjadi sangat kecil Apabila jumlah data yang disimpan adalah besar, ia juga akan membawa ke B- Kedalaman Pokok lebih besar, yang meningkatkan bilangan I/O cakera semasa pertanyaan, sekali gus menjejaskan kecekapan pertanyaan. Dalam B+Tree, semua nod rekod data disimpan pada nod daun dalam lapisan yang sama mengikut urutan nilai kunci Hanya maklumat nilai kunci disimpan pada nod bukan daun Ini boleh meningkatkan bilangan nilai kunci yang disimpan dalam setiap satu nod. , kurangkan ketinggian B+Tree.
B+Tree mempunyai beberapa perbezaan berbanding B-Tree:
Nod bukan daun hanya menyimpan maklumat nilai utama.
Terdapat penuding pautan antara semua nod daun.
Rekod data disimpan dalam nod daun.
Optimumkan B-Tree dalam bahagian sebelumnya Memandangkan nod bukan daun B+Tree hanya menyimpan maklumat nilai utama, dengan mengandaikan bahawa setiap blok cakera boleh menyimpan 4 nilai utama dan maklumat penunjuk, ia menjadi B+Tree. . Strukturnya ditunjukkan dalam rajah di bawah:
Biasanya terdapat dua penunjuk kepala pada B+Tree, satu menghala ke nod akar dan satu lagi menghala ke nod daun dengan kata kunci terkecil, dan semua Terdapat struktur cincin rantai antara nod daun (iaitu nod data). Oleh itu, dua operasi carian boleh dilakukan pada B+Tree: satu ialah carian julat dan carian halaman untuk kunci utama, dan satu lagi ialah carian rawak bermula dari nod akar.
Mungkin hanya terdapat 22 rekod data dalam contoh di atas, dan kelebihan B+Tree tidak dapat dilihat Berikut adalah pengiraan:
Saiz halaman dalam enjin storan InnoDB ialah 16KB. , dan kunci utama jadual umum Jenisnya ialah INT (menduduki 4 bait) atau BIGINT (menduduki 8 bait), dan jenis penuding biasanya 4 atau 8 bait, yang bermaksud satu halaman (satu nod dalam B+Tree) menyimpan kira-kira 16KB /(8B+8B)=1K nilai utama (kerana ia adalah anggaran, untuk kemudahan pengiraan, nilai K di sini ialah 〖10〗^3). Dengan kata lain, indeks B+Tree dengan kedalaman 3 boleh mengekalkan 10^3 * 10^3 * 10^3 = 1 bilion rekod.
Dalam situasi sebenar, setiap nod mungkin tidak terisi sepenuhnya, jadi dalam pangkalan data, ketinggian B+Tree biasanya antara 2 dan 4 tahap. Enjin storan InnoDB MySQL direka bentuk supaya nod akar berada dalam ingatan, yang bermaksud bahawa hanya 1 hingga 3 operasi I/O cakera diperlukan untuk mencari rekod baris bagi nilai kunci tertentu.
Indeks B+Tree dalam pangkalan data boleh dibahagikan kepada indeks berkelompok dan indeks sekunder. Gambar rajah contoh B+Tree di atas dilaksanakan dalam pangkalan data sebagai indeks berkelompok Nod daun dalam B+Tree indeks berkelompok menyimpan data rekod baris keseluruhan jadual. Perbezaan antara indeks tambahan dan indeks berkelompok ialah nod daun indeks tambahan tidak mengandungi semua data rekod baris, tetapi menyimpan kunci indeks berkelompok data baris yang sepadan, iaitu kunci utama. Apabila menanyakan data melalui indeks tambahan, enjin storan InnoDB akan merentasi indeks tambahan untuk mencari kunci utama, dan kemudian mencari data rekod baris lengkap dalam indeks berkelompok melalui kunci utama.
Atas ialah kandungan terperinci Apakah kegunaan indeks dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!