cari
Rumahpangkalan datatutorial mysqlApakah indeks berkelompok, indeks tidak berkelompok, indeks bersama dan indeks unik dalam MySQL

    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:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
    Bagaimanakah MySQL mengendalikan replikasi data?Bagaimanakah MySQL mengendalikan replikasi data?Apr 28, 2025 am 12:25 AM

    MySQL memproses replikasi data melalui tiga mod: replikasi asynchronous, semi-sinkron dan kumpulan. 1) Prestasi replikasi tak segerak tinggi tetapi data mungkin hilang. 2) Replikasi semi-sinkron meningkatkan keselamatan data tetapi meningkatkan latensi. 3) Replikasi kumpulan menyokong replikasi multi-tuan dan failover, sesuai untuk keperluan ketersediaan yang tinggi.

    Bagaimanakah anda boleh menggunakan pernyataan Jelaskan untuk menganalisis prestasi pertanyaan?Bagaimanakah anda boleh menggunakan pernyataan Jelaskan untuk menganalisis prestasi pertanyaan?Apr 28, 2025 am 12:24 AM

    Kenyataan Jelaskan boleh digunakan untuk menganalisis dan meningkatkan prestasi pertanyaan SQL. 1. Jalankan pernyataan Jelaskan untuk melihat pelan pertanyaan. 2. Menganalisis hasil output, perhatikan jenis akses, penggunaan indeks dan sertai pesanan. 3. Membuat atau menyesuaikan indeks berdasarkan hasil analisis, mengoptimumkan operasi gabungan, dan elakkan pengimbasan jadual penuh untuk meningkatkan kecekapan pertanyaan.

    Bagaimana anda membuat sandaran dan memulihkan pangkalan data MySQL?Bagaimana anda membuat sandaran dan memulihkan pangkalan data MySQL?Apr 28, 2025 am 12:23 AM

    Menggunakan mysqldump untuk sandaran logik dan mysqlenterpriseBackup untuk sandaran panas adalah cara yang berkesan untuk membuat sandaran pangkalan data MySQL. 1. Gunakan mysqldump untuk menyokong pangkalan data: mysqldump-usoot-pmydatabase> mydatabase_backup.sql. 2. Gunakan mysqlenterpriseBackup untuk sandaran panas: mysqlbackup-user = root-password = password-backup-dir =/to/to/backupbackup. Semasa pulih, gunakan kehidupan yang sepadan

    Apakah sebab -sebab umum pertanyaan perlahan di MySQL?Apakah sebab -sebab umum pertanyaan perlahan di MySQL?Apr 28, 2025 am 12:18 AM

    Sebab utama pertanyaan MySQL yang perlahan termasuk penggunaan indeks yang hilang atau tidak wajar, kerumitan pertanyaan, jumlah data yang berlebihan dan sumber perkakasan yang tidak mencukupi. Cadangan pengoptimuman termasuk: 1. Buat indeks yang sesuai; 2. Mengoptimumkan pernyataan pertanyaan; 3. Gunakan teknologi pembahagian meja; 4. Meningkatkan perkakasan dengan sewajarnya.

    Apakah pandangan di MySQL?Apakah pandangan di MySQL?Apr 28, 2025 am 12:04 AM

    Pandangan MySQL adalah jadual maya berdasarkan hasil pertanyaan SQL dan tidak menyimpan data. 1) Pandangan memudahkan pertanyaan kompleks, 2) meningkatkan keselamatan data, dan 3) mengekalkan konsistensi data. Pandangan disimpan pertanyaan dalam pangkalan data yang boleh digunakan seperti jadual, tetapi data dihasilkan secara dinamik.

    Apakah perbezaan sintaks antara MySQL dan dialek SQL yang lain?Apakah perbezaan sintaks antara MySQL dan dialek SQL yang lain?Apr 27, 2025 am 12:26 AM

    Mysqldiffersfromothersqldialectsyntaxforlimit, auto-increment, stringcomparison, subqueries, andperformanceanalysis.1) mySqlusSlimit, whilesqlserverestopandoracleusesusesrownum.2)

    Apakah pemisahan MySQL?Apakah pemisahan MySQL?Apr 27, 2025 am 12:23 AM

    Pemisahan MySQL meningkatkan prestasi dan memudahkan penyelenggaraan. 1) Bahagikan jadual besar ke dalam kepingan kecil dengan kriteria tertentu (seperti julat tarikh), 2) secara fizikal membahagikan data ke dalam fail bebas, 3) MystQL boleh memberi tumpuan kepada partisi yang berkaitan apabila pertanyaan, 4) Pengoptimal pertanyaan boleh melangkau partisi yang tidak berkaitan, 5) Memilih strategi partisi yang tepat dan mengekalkannya secara tetap adalah kunci.

    Bagaimana anda memberikan dan membatalkan keistimewaan di MySQL?Bagaimana anda memberikan dan membatalkan keistimewaan di MySQL?Apr 27, 2025 am 12:21 AM

    Bagaimana untuk memberikan dan membatalkan keizinan di MySQL? 1. Gunakan pernyataan geran untuk memberikan kebenaran, seperti GrantallPrivileGeSondatabase_name.to'username'@'host '; 2. Gunakan pernyataan membatalkan untuk membatalkan kebenaran, seperti RevokeAllPrivileGeSondatabase_name.from'username'@'host 'untuk memastikan komunikasi tepat pada masanya perubahan kebenaran.

    See all articles

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    Video Face Swap

    Video Face Swap

    Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

    Alat panas

    Pelayar Peperiksaan Selamat

    Pelayar Peperiksaan Selamat

    Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    mPDF

    mPDF

    mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Muat turun versi mac editor Atom

    Muat turun versi mac editor Atom

    Editor sumber terbuka yang paling popular