Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL

WBOY
Lepaskan: 2023-06-03 12:09:25
ke hadapan
713 orang telah melayarinya

Mari kita mulakan dengan perkara yang pelik:

Biar saya buat beberapa data untuk menghasilkan semula masalah dan buat jadual pengguna:

CREATE TABLE `user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',
  `age` int(11) NOT NULL DEFAULT 0 COMMENT '年龄',
  PRIMARY KEY (`id`),
  KEY `idx_age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Salin selepas log masuk

Soal maklumat pengguna umur ini melalui kumpulan umur pengguna dan semak pelan pelaksanaan SQL:

explain select * from user 
where age in (1,2,3,4,5,6,7,8,9);
Salin selepas log masuk

Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL

di mana keadaan mempunyai 9 Parameter, fokus pada anggaran bilangan baris yang diimbas dalam pelan pelaksanaan, iaitu 279 baris.

Tiada masalah di sini, anggarannya sangat tepat, ia sebenarnya 279 baris.

Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL

Namun, masalah timbul Apabila kita menambah parameter lain pada keadaan di mana, ia menjadi 10 parameter Anggaran bilangan garisan yang diimbas sepatutnya meningkat ia telah dikurangkan dengan banyak.

explain select * from user
where age in (1,2,3,4,5,6,7,8,9,10);
Salin selepas log masuk

Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL

Ia tiba-tiba dikurangkan kepada 30 baris, tetapi berapakah bilangan baris sebenar?

Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL

Nombor sebenar ialah 310 baris, dan anggaran bilangan baris yang diimbas ialah 30 baris. Saya benar-benar salah.

Apa yang berlaku dengan MySQL? Bolehkah ia dianggarkan?

Jika anda tidak dapat meramalkannya, gunakan orang lain!

Mesti semua orang keliru, sehingga saya pergi ke laman web rasmi dan melihat satu perkataan, Selam indeks .

Berkaitan dengan perkataan ini, terdapat juga parameter konfigurasi eq_range_index_dive_limit.

Untuk versi sebelum MySQL5.7.3, nilai ini lalai kepada 10, dan untuk versi seterusnya, nilai ini lalai kepada 200.

Anda boleh menggunakan arahan untuk menyemak saiz nilai ini:

show variables like '%eq_range_index_dive_limit%';
Salin selepas log masuk

Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL

Sudah tentu, kita juga boleh ubah suai nilai ini secara manual Saiz:

set eq_range_index_dive_limit=200;
Salin selepas log masuk

Ini eq_range_index_dive_limit Fungsi konfigurasi ialah:

Apabila bilangan parameter dalam pernyataan di mana dalam keadaan adalah kurang daripada nilai ini, MySQL akan menggunakan Selam indeks menganggarkan bilangan baris yang diimbas, yang sangat tepat.

Apabila bilangan parameter dalam keadaan pernyataan where adalah lebih besar daripada atau sama dengan nilai ini, MySQL menggunakan kaedah lain Statistik indeks (Statistik indeks) untuk menganggarkan bilangan yang diimbas baris, dengan ralat yang besar .

Mengapa MySQL melakukan ini?

semua menggunakan Selam indeks untuk menganggarkan bilangan baris yang diimbas, bukankah ia bagus?

Malah, ini berdasarkan pertimbangan kos Selam indeksAnggaran kos lebih tinggi dan ia sesuai untuk volum data yang kecil. Statistik indeksAnggaran kos adalah rendah dan sesuai untuk volum data yang besar.

Secara amnya, keadaan pernyataan where kami tidak mempunyai terlalu banyak parameter, jadi adalah sesuai untuk menggunakan selam indeks untuk menganggarkan bilangan baris yang diimbas.

Adalah disyorkan bahawa pelajar yang masih menggunakan versi sebelum MySQL5.7.3 secara manual mengubah suai parameter konfigurasi selam indeks kepada nilai yang sesuai.

Jika dalam keadaan dalam projek anda mempunyai sehingga 500 parameter, tukar parameter konfigurasi kepada 501.

Dengan cara ini, MySQL menganggarkan bilangan baris yang diimbas dengan lebih tepat dan boleh memilih indeks yang lebih sesuai.

Atas ialah kandungan terperinci Analisis contoh menyelam indeks untuk pengoptimuman prestasi pertanyaan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!