Rumah  >  Artikel  >  pangkalan data  >  Apakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL

Apakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL

WBOY
WBOYke hadapan
2023-05-26 16:37:472181semak imbas

    1. Jenis indeks

    Indeks boleh dibahagikan kepada indeks B-Tree dan indeks cincang mengikut pelaksanaan asas pada kebanyakan masa kami menggunakan B -Indeks pokok, kerana prestasi dan cirinya yang baik, lebih sesuai untuk membina sistem konkurensi tinggi.

    Dibahagikan mengikut kaedah penyimpanan indeks, indeks boleh dibahagikan kepada indeks berkelompok dan indeks tidak berkelompok. Nod daun bagi indeks tidak berkelompok hanya mengandungi semua medan dan ID kunci utama, manakala nod daun bagi indeks berkelompok mengandungi baris rekod lengkap.

    Mengikut indeks berkelompok dan indeks tidak berkelompok, ia boleh dibahagikan lagi kepada indeks biasa, meliputi indeks, indeks unik dan indeks bersama.

    2. Indeks berkelompok dan indeks tidak berkelompok

    Indeks berkelompok juga dipanggil indeks berkelompok Ia sebenarnya bukan jenis indeks yang berasingan, tetapi kaedah penyimpanan data indeks menyimpan semua maklumat lajur barisan rekod. Dengan kata lain, nod daun indeks berkelompok mengandungi baris rekod lengkap.

    Indeks bukan berkelompok juga dipanggil indeks tambahan dan indeks biasa Nod daunnya hanya mengandungi satu nilai kunci utama Untuk mencari rekod melalui indeks bukan berkelompok, anda perlu mencari kunci utama dahulu, dan kemudian pergi ke indeks berkelompok melalui kunci utama Cari baris rekod yang sepadan, proses ini dipanggil pulangan jadual.

    Sebagai contoh, jadual data yang mengandungi nama pengguna dan umur, dengan mengandaikan kunci utama ialah ID pengguna, struktur indeks berkelompok ialah (oren mewakili id, hijau ialah penunjuk kepada nod anak):

    Apakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL

    nod daun, untuk menyerlahkan rekod,

    dipisahkan, ia membentuk keseluruhan rekod. (id, name, age)

    Struktur indeks tidak berkelompok (diindeks mengikut umur) ialah:

    Apakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL

    Selain medan umur itu sendiri, dalam nod daun ini node , hanya mengandungi ID kunci utama rekod semasa dan tidak mengandungi maklumat rekod lengkap. Anda perlu menanyakan indeks berkelompok melalui nombor ID untuk mendapatkan keseluruhan baris data rekod.

    Dalam InnoDB, setiap jadual mesti mempunyai indeks berkelompok, yang dibuat berdasarkan kunci utama secara lalai. Jika tiada kunci utama dalam jadual, InnoDB akan memilih lajur yang sesuai sebagai indeks berkelompok Jika tiada lajur yang sesuai ditemui, lajur tersembunyi DB_ROW_ID akan digunakan sebagai indeks berkelompok.

    3. Meliputi indeks

    Kerana indeks tidak berkelompok tidak mengandungi maklumat data yang lengkap, mencari rekod data yang lengkap memerlukan pulangan jadual, jadi satu operasi pertanyaan sebenarnya memerlukan dua pertanyaan indeks. Jika setiap pertanyaan indeks perlu dijalankan dua kali untuk mendapatkan hasilnya, maka ini pasti akan membawa kepada kehilangan kecekapan, kerana jika anda boleh mengurangkan pertanyaan dengan satu, anda harus mengurangkannya dengan satu.

    Ambil indeks umur di atas sebagai contoh Ia adalah indeks bukan berkelompok Jika saya ingin menanyakan ID pengguna mengikut umur, saya melaksanakan pernyataan berikut:

    <. tr class=" firstRow">1

    1

    select id from userinfo where age = 10;

    pilih id daripada info pengguna di mana umur = 10;

    Adakah masih perlu mengembalikan borang dalam kes ini? Kerana saya hanya memerlukan nilai id, saya sudah boleh mendapatkan id melalui indeks umur Jika saya masih kembali ke jadual sekali, bukankah ia akan menjadi operasi yang sia-sia? Malah ia tidak diperlukan. Apabila indeks tambahan sudah mengandungi semua maklumat yang diperlukan untuk pertanyaan, operasi pemulangan jadual boleh dielakkan dalam pertanyaan indeks. Ini adalah indeks penutup.

    4. Indeks bersama

    Indeks bersama merujuk kepada indeks yang dibuat pada berbilang lajur pada masa yang sama Selepas mencipta indeks bersama, nod daun akan mengandungi nilai setiap lajur indeks pada masa yang sama, dan ia akan berdasarkan berbilang lajur pada masa yang sama Pengisihan lajur, pengisihan ini serupa dengan apa yang kita fahami sebagai susunan kamus.

    Contohnya, struktur indeks yang dicipta untuk nama dan umur di atas pada masa yang sama:

    Apakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL

    (name, age) adalah semua singkatan, saya tidak boleh memikirkan lebih daripada sedozen nama.

    Setiap nod daun menyimpan semua lajur indeks pada masa yang sama Selain itu, ia masih mengandungi id kunci utama.

    Prinsip pemadanan awalan paling kiri

    Apabila indeks dicipta untuk berbilang lajur, indeks tidak boleh digunakan selagi ia mengandungi lajur yang indeks itu mesti dibuat ikut prinsip padanan awalan paling kiri.

    Dengan mengandaikan bahawa indeks dicipta pada lajur (A, B, C), maka hanya senario berikut boleh menggunakan indeks:

    • Pada lajur (A, B , C)/( Pertanyaan A, C) atau (A, B) akan sepadan dengan indeks dan indeks tidak boleh digunakan untuk (C, A) atau (B, C).

    • Wildcard hanya boleh digunakan dalam bentuk LIKE 'val%', bukan LIKE '%VAL%', yang akan menyebabkan imbasan jadual penuh.

    • Lajur indeks tidak boleh dikendalikan Contohnya, DI MANA A + 1 = 5 akan menyebabkan kegagalan indeks.

    • Lajur indeks tidak boleh mengandungi pertanyaan nilai julat, seperti SUKA/ANTARA/>/

    • Lajur indeks tidak boleh mengandungi nilai NULL.

    Tekan turun indeks

    Versi baharu MySQL (5.6 atau ke atas) memperkenalkan mekanisme tolak turun indeks: semasa proses traversal indeks, mekanisme tolak bawah indeks boleh menjadi Fields are dinilai dahulu, dan rekod yang tidak memenuhi syarat ditapis terus untuk mengurangkan bilangan pulangan jadual.

    Sebagai contoh, untuk indeks bersama pada (nama, umur) dalam jadual di atas, logik pertanyaan dalam keadaan biasa ialah:

    • Cari ID kunci utama yang sepadan melalui nama

    • Padankan keadaan umur berdasarkan lajur yang direkodkan oleh id

    Pendekatan ini akan membawa kepada banyak pemulangan jadual yang tidak diperlukan, contohnya, terdapat (Zhang San, 10 ) dan (Zhang San, 15 Sekarang kita ingin menanyakan rekod (Zhang San, 20). Apabila membuat pertanyaan, mula-mula cari semua ID kunci utama yang memenuhi syarat melalui Zhang San, dan kemudian lintasi baris yang memenuhi syarat dalam indeks berkelompok untuk melihat sama ada terdapat rekod yang sepadan dengan umur = 20. Dalam situasi sebenar, tiada rekod yang memenuhi syarat, jadi proses pengembalian jadual ini boleh dianggap sebagai langkah yang sia-sia.

    Fungsi utama tekan turun indeks adalah untuk memperbaiki ini Dalam indeks bersama, rekod yang tidak perlu dikembalikan ke jadual ditapis mengikut nama dan umur, dan kemudian indeks dikembalikan ke jadual. untuk mengurangkan bilangan pulangan jadual.

    5. Indeks unik

    Indeks unik ialah indeks yang tidak membenarkan nilai indeks yang sama Sistem menyemak sama ada terdapat nilai kunci pendua semasa membuat indeks, dan setiap kali pasangan dikemas kini atau ditingkatkan Ini ditanda semasa mengelog. Indeks kunci utama ialah indeks unik.

    Atas ialah kandungan terperinci Apakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam