Jadual Kandungan
Unit storan pangkalan data
Struktur data indeks
Keterbatasan Pokok Binari
Pokok B
Indeks B-tree
Indeks HASH
Rumah pangkalan data tutorial mysql Pemahaman mendalam tentang struktur indeks MySQL

Pemahaman mendalam tentang struktur indeks MySQL

Mar 30, 2022 pm 06:13 PM
mysql

Artikel ini membawa anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan isu berkaitan tentang struktur indeks. Jadi, apakah struktur indeks? Mengapa pengindeksan boleh begitu pantas? Mari kita lihat di bawah, saya harap ia akan membantu semua orang.

Pemahaman mendalam tentang struktur indeks MySQL

Pembelajaran yang disyorkan: tutorial mysql

Unit storan pangkalan data

Pertama sekali, kita perlu tahu bahawa untuk mencapai kegigihan, indeks hanya boleh disimpan pada cakera keras Apabila membuat pertanyaan melalui indeks, operasi I/O pada cakera keras akan berlaku, apabila mereka bentuk indeks, adalah perlu untuk mengurangkan bilangan mencari sebanyak mungkin, dengan itu mengurangkan I/O memakan masa.

Selain itu, anda perlu mengetahui prinsip yang sangat penting: unit asas ruang penyimpanan pengurusan pangkalan data ialah 页(Page), dan rekod baris berbilang (Baris) disimpan dalam satu halaman.

Sistem komputer akan melakukan 预读 pengoptimuman untuk I/O cakera Apabila I/O dilakukan, sebagai tambahan kepada data pada alamat cakera semasa, data bersebelahan juga akan dibaca ke dalam penimbal memori. pool. , data yang dibaca oleh setiap I/O menjadi satu halaman dan saiz halaman lalai InnoDB ialah 16KB. Pemahaman mendalam tentang struktur indeks MySQL
64 halaman berturut-turut membentuk 区(Extent), satu atau lebih takat membentuk 段(Segment) dan satu atau lebih segmen membentuk 表空间(Tablespace). InnoDB mempunyai dua jenis ruang jadual Ruang jadual yang dikongsi bermakna berbilang jadual berkongsi satu ruang jadual bebas bermakna data dan indeks setiap jadual disimpan dalam ruang jadual bebas.

Struktur halaman data adalah seperti berikut (Sumber: Geek Time "MySQL Must Know"):
Pemahaman mendalam tentang struktur indeks MySQL
7 kandungan struktur halaman data boleh dibahagikan secara kasar kepada berikut tiga kategori:

  • Bahagian umum fail, digunakan untuk mengesahkan bahawa penghantaran halaman selesai
    • Tajuk Fail: menyatakan maklumat halaman FIL_PAGE_PREV dan FIL_PAGE_NEXT digunakan dalam pengepala fail untuk membentuk senarai terpaut berganda, masing-masing Menunjukkan ke halaman data sebelumnya dan seterusnya.
    • Pengepala Fail: Rekod maklumat status halaman
    • Treler Fail: Sahkan sama ada halaman itu lengkap
  • Bahagian rekod , digunakan untuk menyimpan data rekod
    • Rekod maksimum dan minimum (Infimum/Supremum): rekod baris maya, mewakili rekod maksimum dan rekod minimum halaman data.
    • Rekod Pengguna dan Ruang Bebas: digunakan untuk menyimpan kandungan rekod baris data
  • Bahagian indeks, digunakan untuk meningkatkan kecekapan mendapatkan semula rekod
    • Direktori Halaman: Kedai lokasi relatif rekod pengguna

Untuk butiran, sila rujuk laporan bulanan kernel pangkalan data Taobao

Struktur data indeks

Sememangnya, kami akan memikirkan beberapa struktur data biasa yang terlibat dalam algoritma carian, seperti pepohon carian binari, pepohon seimbang perduaan, dsb. Malah, indeks Innodb menggunakan B 树 Dilaksanakan, mari kita lihat mengapa struktur indeks ini dipilih.

Keterbatasan Pokok Binari

Mari kita semak secara ringkas definisi Pokok Carian Binari Dalam pepohon carian binari, jika kunci yang ditemui lebih besar daripada nod akar, maka dalam Carian dalam subpokok kanan Jika kunci lebih kecil daripada nod akar, cari dalam subpokok kiri sehingga kunci ditemui Kerumitan masa ialah O(logn). Sebagai contoh, jujukan [4,2,6,1,3,5,7] akan menjana pepohon carian binari berikut:
Pemahaman mendalam tentang struktur indeks MySQL
Walau bagaimanapun, dalam beberapa kes khas, kedalaman pepohon binari akan menjadi sangat besar. Contohnya, [1,2,3,4,5,6,7] akan menjana pokok berikut:
Pemahaman mendalam tentang struktur indeks MySQL
Dalam kes berikut, dalam kes yang paling teruk, ia memerlukan 7 kali untuk menyemak Hasil yang diingini boleh didapati, dan masa pertanyaan menjadi O(n).

Untuk mengoptimumkan keadaan ini, terdapat pepohon carian binari seimbang (pokok AVL merujuk kepada pokok yang perbezaan ketinggian antara subpokok kiri dan kanan tidak melebihi 1. Carian). kerumitan masa ialah O(logn) , ini sudah pun menjadi pepohon carian yang ideal, tetapi dalam pangkalan data dengan berpuluh-puluh juta baris rekod, kedalaman pokok itu akan tetap sangat tinggi, dan ia masih bukan struktur yang paling ideal.

Pokok B

Jadi, jika anda berkembang daripada pokok binari kepada pokok N-ary, mudah untuk membayangkan bahawa pokok N-ary boleh mengurangkan kedalaman pokok itu dengan banyak. Malah, struktur pokok 4 lapisan adalah Ia sudah boleh menyokong berpuluh-puluh terabait data.

B-tree (Pokok Imbangan) ialah pokok N-ary yang juga dipanggil B-pokok, yang memenuhi definisi berikut:
Biarkan k sebagai darjah B-pokok. mewakili setiap Bilangan maksimum nod anak yang boleh dimiliki oleh nod),

  1. Setiap blok cakera mengandungi paling banyak k - 1 kata kunci dan k penunjuk ke nod anak
  2. Dalam nod daun, hanya ada kata kunci dan tiada penunjuk nod anak
  3. The kata kunci dalam setiap nod disusun dalam susunan menaik Semua kata kunci dalam subpokok kiri setiap kata kunci adalah lebih kecil daripadanya, dan semua kata kunci dalam subpokok kanan adalah lebih besar daripadanya.
  4. Semua nod daun berada pada lapisan yang sama.

Seperti yang dinyatakan di atas, setiap I/O akan pra-membaca data blok cakera, yang bersaiz satu halaman Kandungan blok cakera digunakan untuk mewakili I/O. Struktur B-tree adalah seperti Gambar berikut (Sumber: Geek Time SQL mesti tahu):
Pemahaman mendalam tentang struktur indeks MySQL
B-tree juga dipesan Memandangkan penunjuk nod anak mestilah 1 lebih daripada kata kunci , ia boleh dibahagikan kepada sub-pokok menggunakan kata kunci Bahagian nod, seperti dalam contoh dalam rajah, setiap nod mempunyai 2 kekunci dan 3 nod anak, seperti blok cakera 2, kunci titik bait pertama ialah. 3, 5 adalah kurang daripada nod anak pertamanya sendiri 8 , nod anak kedua 9, 10 adalah antara 8 dan 12, nilai nod anak ketiga 13, 15 lebih besar daripada nod anak kedua 12 sendiri.

Andaikan kita ingin mencari 9 sekarang, langkah-langkahnya adalah seperti berikut:

  1. Bandingkan dengan blok cakera nod akar 1 (17,35), kurang daripada 17, teruskan untuk mencari dalam penuding P1, sepadan dengan cakera Blok 2
  2. dibandingkan dengan blok cakera 2 (8,12), terletak di antara keduanya, teruskan mencari di penunjuk P2, sepadan dengan blok cakera 6
  3. dan blok cakera 6 (9, 10) Bandingkan dan cari 9

Anda dapat melihat bahawa walaupun banyak operasi perbandingan dilakukan, disebabkan prabacaan, perbandingan dalam blok cakera dilakukan dalam ingatan dan tidak menggunakan cakera I/O, operasi di atas hanya memerlukan 3 kali I/O untuk diselesaikan, yang merupakan struktur yang ideal.

Indeks B-tree

B-tree dipertingkatkan lagi berdasarkan B-tree Perbezaan antara B-tree dan B-tree adalah seperti berikut:

    .
  1. B-pokok dibina sedemikian rupa sehingga, untuk kata kunci dalam nod induk, semua kata kunci subpokok kiri adalah kurang daripadanya dan semua kata kunci subpokok kanan lebih besar daripada atau sama dengannya
  2. Nod bukan daun hanya digunakan untuk pengindeksan, Tiada rekod data akan disimpan
  3. Kata kunci nod induk juga akan muncul dalam nod anak, dan ia adalah nilai maksimum (atau nilai minimum) dalam nod anak
  4. Semua kata kunci akan muncul dalam nod anak Antara nod daun, nod daun membentuk senarai terpaut tersusun, diisih dari kecil ke besar.

Contohnya adalah seperti berikut, kata kunci nod induk ialah nilai minimum di antara nod anak (Sumber: Geek Time SQL mesti tahu): Pemahaman mendalam tentang struktur indeks MySQL
Andaian Untuk mencari kata kunci 16, langkah carian adalah seperti berikut:

  1. Bandingkan dengan cakera nod akar 1 (1,18,35), 16 antara 1 dan 18, dapatkan penunjuk P1 , menunjuk ke cakera 2
  2. Cari cakera 2 (1,8,14), 16 lebih besar daripada 14, dapatkan penunjuk P3, tuding ke cakera 7
  3. Cari cakera 7 (14,16, 17), cari 16

Kelebihan B-tree:

  1. Nod dalaman tidak menyimpan data, jadi bilangan rekod yang boleh disimpan oleh setiap nod dalaman adalah lebih besar daripada B-tree, ketinggian pokok lebih rendah, dan I/O kurang, Halaman data dibaca setiap kali I/O mengandungi lebih banyak kandungan
  2. Boleh menyokong pertanyaan julat, hanya melintasi senarai terpaut tersusun yang terdiri daripada nod daun secara langsung
  3. Semua data disimpan dalam nod daun , jadi kecekapan pertanyaan lebih stabil

Indeks HASH

Struktur indeks lalai enjin storan memori MySQL ialah indeks Hash. Hash ialah fungsi yang dipanggil fungsi cincang, yang dihantar melalui Algoritma tertentu (seperti MD5, SHA1, SHA2, dll.) menukar input panjang sewenang-wenangnya kepada output dengan panjang tetap satu. Artikel ini tidak akan memberikan pengenalan yang mendalam kepada fungsi cincang Untuk butiran, sila rujuk kepada Baidu Encyclopedia.

Kecekapan carian hash ialah O(1), yang sangat cekap dict python, peta golang dan peta cincang java semuanya dilaksanakan berdasarkan pangkalan data Key-Value seperti Redis juga dilaksanakan Hash.

Untuk carian yang tepat, indeks Hash lebih cekap daripada indeks B-tree, tetapi indeks Hash mempunyai beberapa had dan oleh itu bukan struktur indeks paling arus perdana.

  1. Oleh kerana data yang ditunjuk oleh indeks Hash tidak tertib, indeks Hash tidak boleh dipersoalkan dalam julat dan tidak menyokong ORDER BY sorting.
  2. Memandangkan Hash ialah padanan tepat, pertanyaan kabur tidak boleh dilakukan.
  3. Indeks cincang tidak menyokong prinsip padanan paling kiri bagi indeks bersama, dan indeks bersama hanya berkuat kuasa apabila terdapat padanan lengkap. Kerana indeks Hash mengira nilai Hash dengan menggabungkan indeks dan kemudian mengira nilai Hash bersama-sama, bukannya mengira nilai Hash berasingan bagi setiap indeks.
  4. Jika medan diindeks mempunyai banyak nilai pendua, ia akan menyebabkan sejumlah besar konflik cincang dan pertanyaan akan menjadi sangat memakan masa.

Berdasarkan sebab di atas, enjin Mysql InnoDB tidak menyokong indeks Hash, tetapi terdapat fungsi indeks Hash adaptif dalam struktur memori Apabila nilai indeks digunakan dengan sangat kerap, ia akan menjadi dalam B Berdasarkan indeks pepohon, secara automatik mencipta indeks Hash untuk meningkatkan prestasi pertanyaan.

Indeks Adaptive Hash boleh difahami sebagai "indeks indeks". Indeks Hash digunakan untuk menyimpan alamat halaman dalam indeks B-tree dan mencari nod daun yang sepadan dengan cepat. Ia boleh dilihat melalui pembolehubah innodb_adaptive_hash_index.

Pembelajaran yang disyorkan: tutorial mysql

Atas ialah kandungan terperinci Pemahaman mendalam tentang struktur indeks MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Mysql: Konsep mudah untuk pembelajaran mudah Mysql: Konsep mudah untuk pembelajaran mudah Apr 10, 2025 am 09:29 AM

MySQL adalah sistem pengurusan pangkalan data sumber terbuka. 1) Buat Pangkalan Data dan Jadual: Gunakan perintah Createdatabase dan Createtable. 2) Operasi Asas: Masukkan, Kemas kini, Padam dan Pilih. 3) Operasi lanjutan: Sertai, subquery dan pemprosesan transaksi. 4) Kemahiran Debugging: Semak sintaks, jenis data dan keizinan. 5) Cadangan Pengoptimuman: Gunakan indeks, elakkan pilih* dan gunakan transaksi.

Cara membuka phpmyadmin Cara membuka phpmyadmin Apr 10, 2025 pm 10:51 PM

Anda boleh membuka phpmyadmin melalui langkah -langkah berikut: 1. Log masuk ke panel kawalan laman web; 2. Cari dan klik ikon phpmyadmin; 3. Masukkan kelayakan MySQL; 4. Klik "Login".

MySQL: Pengenalan kepada pangkalan data paling popular di dunia MySQL: Pengenalan kepada pangkalan data paling popular di dunia Apr 12, 2025 am 12:18 AM

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

Mengapa menggunakan mysql? Faedah dan kelebihan Mengapa menggunakan mysql? Faedah dan kelebihan Apr 12, 2025 am 12:17 AM

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Cara menggunakan redis berulir tunggal Cara menggunakan redis berulir tunggal Apr 10, 2025 pm 07:12 PM

Redis menggunakan satu seni bina berulir untuk memberikan prestasi tinggi, kesederhanaan, dan konsistensi. Ia menggunakan I/O multiplexing, gelung acara, I/O yang tidak menyekat, dan memori bersama untuk meningkatkan keserasian, tetapi dengan batasan batasan konkurensi, satu titik kegagalan, dan tidak sesuai untuk beban kerja yang berintensifkan.

MySQL dan SQL: Kemahiran Penting untuk Pemaju MySQL dan SQL: Kemahiran Penting untuk Pemaju Apr 10, 2025 am 09:30 AM

MySQL dan SQL adalah kemahiran penting untuk pemaju. 1.MYSQL adalah sistem pengurusan pangkalan data sumber terbuka, dan SQL adalah bahasa standard yang digunakan untuk mengurus dan mengendalikan pangkalan data. 2.MYSQL menyokong pelbagai enjin penyimpanan melalui penyimpanan data yang cekap dan fungsi pengambilan semula, dan SQL melengkapkan operasi data yang kompleks melalui pernyataan mudah. 3. Contoh penggunaan termasuk pertanyaan asas dan pertanyaan lanjutan, seperti penapisan dan penyortiran mengikut keadaan. 4. Kesilapan umum termasuk kesilapan sintaks dan isu -isu prestasi, yang boleh dioptimumkan dengan memeriksa penyataan SQL dan menggunakan perintah menjelaskan. 5. Teknik pengoptimuman prestasi termasuk menggunakan indeks, mengelakkan pengimbasan jadual penuh, mengoptimumkan operasi menyertai dan meningkatkan kebolehbacaan kod.

Tempat Mysql: Pangkalan Data dan Pengaturcaraan Tempat Mysql: Pangkalan Data dan Pengaturcaraan Apr 13, 2025 am 12:18 AM

Kedudukan MySQL dalam pangkalan data dan pengaturcaraan sangat penting. Ia adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pelbagai senario aplikasi. 1) MySQL menyediakan fungsi penyimpanan data, organisasi dan pengambilan data yang cekap, sistem sokongan web, mudah alih dan perusahaan. 2) Ia menggunakan seni bina pelanggan-pelayan, menyokong pelbagai enjin penyimpanan dan pengoptimuman indeks. 3) Penggunaan asas termasuk membuat jadual dan memasukkan data, dan penggunaan lanjutan melibatkan pelbagai meja dan pertanyaan kompleks. 4) Soalan -soalan yang sering ditanya seperti kesilapan sintaks SQL dan isu -isu prestasi boleh disahpepijat melalui arahan jelas dan log pertanyaan perlahan. 5) Kaedah pengoptimuman prestasi termasuk penggunaan indeks rasional, pertanyaan yang dioptimumkan dan penggunaan cache. Amalan terbaik termasuk menggunakan urus niaga dan preparedStatemen

Pantau titisan redis dengan perkhidmatan pengeksport redis Pantau titisan redis dengan perkhidmatan pengeksport redis Apr 10, 2025 pm 01:36 PM

Pemantauan yang berkesan terhadap pangkalan data REDIS adalah penting untuk mengekalkan prestasi yang optimum, mengenal pasti kemungkinan kesesakan, dan memastikan kebolehpercayaan sistem keseluruhan. Perkhidmatan Pengeksport Redis adalah utiliti yang kuat yang direka untuk memantau pangkalan data REDIS menggunakan Prometheus. Tutorial ini akan membimbing anda melalui persediaan lengkap dan konfigurasi perkhidmatan pengeksport REDIS, memastikan anda membina penyelesaian pemantauan dengan lancar. Dengan mengkaji tutorial ini, anda akan mencapai tetapan pemantauan operasi sepenuhnya

See all articles