cari
Rumahpangkalan datatutorial mysqlPemahaman mendalam tentang struktur indeks 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
Artikel ini dikembalikan pada:CSDN. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Belajar MySQL: Panduan Langkah demi Langkah untuk Pengguna BaruBelajar MySQL: Panduan Langkah demi Langkah untuk Pengguna BaruApr 19, 2025 am 12:19 AM

MySQL bernilai belajar kerana ia adalah sistem pengurusan pangkalan data sumber terbuka yang sesuai untuk penyimpanan data, pengurusan dan analisis. 1) MySQL adalah pangkalan data relasi yang menggunakan SQL untuk mengendalikan data dan sesuai untuk pengurusan data berstruktur. 2) Bahasa SQL adalah kunci untuk berinteraksi dengan MySQL dan menyokong operasi CRUD. 3) Prinsip kerja MySQL termasuk seni bina klien/pelayan, enjin penyimpanan dan pengoptimum pertanyaan. 4) Penggunaan asas termasuk membuat pangkalan data dan jadual, dan penggunaan lanjutan melibatkan menyertai jadual menggunakan Join. 5) Kesilapan umum termasuk kesilapan sintaks dan isu kebenaran, dan kemahiran debugging termasuk menyemak sintaks dan menggunakan perintah menjelaskan. 6) Pengoptimuman prestasi melibatkan penggunaan indeks, pengoptimuman penyata SQL dan penyelenggaraan pangkalan data yang tetap.

Mysql: Kemahiran penting untuk pemula untuk menguasaiMysql: Kemahiran penting untuk pemula untuk menguasaiApr 18, 2025 am 12:24 AM

MySQL sesuai untuk pemula untuk mempelajari kemahiran pangkalan data. 1. Pasang alat pelayan dan klien MySQL. 2. Memahami pertanyaan SQL asas, seperti SELECT. 3. Operasi data induk: Buat jadual, masukkan, kemas kini, dan padam data. 4. Belajar Kemahiran Lanjutan: Fungsi Subquery dan Window. 5. Debugging dan Pengoptimuman: Semak sintaks, gunakan indeks, elakkan pilih*, dan gunakan had.

MySQL: Data berstruktur dan pangkalan data hubunganMySQL: Data berstruktur dan pangkalan data hubunganApr 18, 2025 am 12:22 AM

MySQL dengan cekap menguruskan data berstruktur melalui struktur jadual dan pertanyaan SQL, dan melaksanakan hubungan antara meja melalui kunci asing. 1. Tentukan format data dan taip apabila membuat jadual. 2. Gunakan kunci asing untuk mewujudkan hubungan antara jadual. 3. Meningkatkan prestasi melalui pengindeksan dan pengoptimuman pertanyaan. 4. Secara kerap sandaran dan memantau pangkalan data untuk memastikan pengoptimuman keselamatan data dan prestasi.

MySQL: Ciri dan keupayaan utama dijelaskanMySQL: Ciri dan keupayaan utama dijelaskanApr 18, 2025 am 12:17 AM

MySQL adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pembangunan web. Ciri -ciri utamanya termasuk: 1. Menyokong pelbagai enjin penyimpanan, seperti InnoDB dan Myisam, sesuai untuk senario yang berbeza; 2. Menyediakan fungsi replikasi master-hamba untuk memudahkan pengimbangan beban dan sandaran data; 3. Meningkatkan kecekapan pertanyaan melalui pengoptimuman pertanyaan dan penggunaan indeks.

Tujuan SQL: Berinteraksi dengan Pangkalan Data MySQLTujuan SQL: Berinteraksi dengan Pangkalan Data MySQLApr 18, 2025 am 12:12 AM

SQL digunakan untuk berinteraksi dengan pangkalan data MySQL untuk merealisasikan penambahan data, penghapusan, pengubahsuaian, pemeriksaan dan reka bentuk pangkalan data. 1) SQL Melaksanakan operasi data melalui Pilih, Masukkan, Kemas kini, Padam Penyataan; 2) Gunakan pernyataan membuat, mengubah, drop untuk reka bentuk dan pengurusan pangkalan data; 3) Pertanyaan kompleks dan analisis data dilaksanakan melalui SQL untuk meningkatkan kecekapan membuat keputusan perniagaan.

Mysql for Beginners: Bermula dengan Pengurusan Pangkalan DataMysql for Beginners: Bermula dengan Pengurusan Pangkalan DataApr 18, 2025 am 12:10 AM

Operasi asas MySQL termasuk membuat pangkalan data, jadual, dan menggunakan SQL untuk melakukan operasi CRUD pada data. 1. Buat pangkalan data: createdatabasemy_first_db; 2. Buat Jadual: CreateTableBooks (Idintauto_IncrementPrimaryKey, Titlevarchar (100) NotNull, Authorvarchar (100) NotNull, Published_yearint); 3. Masukkan Data: InsertIntoBooks (Tajuk, Pengarang, Published_year) VA

Peranan MySQL: Pangkalan Data dalam Aplikasi WebPeranan MySQL: Pangkalan Data dalam Aplikasi WebApr 17, 2025 am 12:23 AM

Peranan utama MySQL dalam aplikasi web adalah untuk menyimpan dan mengurus data. 1.MYSQL dengan cekap memproses maklumat pengguna, katalog produk, rekod urus niaga dan data lain. 2. Melalui pertanyaan SQL, pemaju boleh mengekstrak maklumat dari pangkalan data untuk menghasilkan kandungan dinamik. 3.MYSQL berfungsi berdasarkan model klien-pelayan untuk memastikan kelajuan pertanyaan yang boleh diterima.

MySQL: Membina pangkalan data pertama andaMySQL: Membina pangkalan data pertama andaApr 17, 2025 am 12:22 AM

Langkah -langkah untuk membina pangkalan data MySQL termasuk: 1. Buat pangkalan data dan jadual, 2. Masukkan data, dan 3. Pertama, gunakan pernyataan CreatedataBase dan createtable untuk membuat pangkalan data dan jadual, kemudian gunakan pernyataan InsertInto untuk memasukkan data, dan akhirnya gunakan pernyataan PILIH untuk menanyakan data.

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

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),

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa