Rumah  >  Artikel  >  pangkalan data  >  Ringkaskan dan selesaikan perangkap mysql left join query yang lambat dan mengambil masa yang lama

Ringkaskan dan selesaikan perangkap mysql left join query yang lambat dan mengambil masa yang lama

WBOY
WBOYke hadapan
2022-10-04 08:00:272901semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql Ia terutamanya memperkenalkan ringkasan masalah pertanyaan sertaan kiri perlahan dan masa yang lama, termasuk perintah EXPLAIN untuk menganalisis pernyataan SELECT, seperti berikut Mari kita ambil satu. lihat, saya harap ia akan membantu semua orang.

Ringkaskan dan selesaikan perangkap mysql left join query yang lambat dan mengambil masa yang lama

Pembelajaran yang disyorkan: tutorial video mysql

Latar belakang masalah

Dua jadual, satu jadual pengguna a ( Kunci utama ialah jenis int), satu ialah jadual maklumat khusus pengguna b (medan id jadual pengguna ialah jenis varchar).

Oleh kerana kami ingin memaparkan pengguna dan maklumat pengguna, kami perlu membuat pertanyaan yang berkaitan Namun, kami mendapati bahawa pertanyaan selepas meninggalkan penyertaan adalah perlahan dan mengambil masa terlalu lama. Data jadual pengguna adalah kira-kira 20,000.

Analisis dan pemprosesan masalah

1 perintah EXPLAIN menganalisis pernyataan SELECT

taipkan The. medan menyediakan asas penting untuk menilai sama ada pertanyaan itu cekap Melalui medan jenis, kami menilai sama ada pertanyaan adalah imbasan jadual penuh atau imbasan indeks

SEMUA: Menunjukkan imbasan jadual penuh ini pertanyaan mempunyai prestasi tertinggi. Salah satu pertanyaan yang paling teruk.

Secara umumnya, pertanyaan kami tidak seharusnya mempunyai SEMUA jenis pertanyaan, kerana pertanyaan sedemikian akan menjadi bencana besar kepada prestasi pangkalan data apabila jumlah data adalah besar. Contohnya, a Pertanyaan ialah pertanyaan jenis SEMUA, jadi secara amnya, anda boleh menambah indeks pada medan yang sepadan untuk mengelakkannya. 2. Tambah indeks baharu

Kerana. didapati indeks medan b dalam jadual belum dibina sebelum ini.

Terangkan analisis sekali lagi
alter table a add index idx_mbrID (mbrID);

Didapati jenis telah berubah kepada ref, mengikut perhubungan prestasi pelbagai jenis (

) Selepas perbandingan, saya rasa ia OK, jadi saya laksanakan pertanyaan.
ALL < index < range ~ index_merge < ref < eq_ref < const < system

3 Ubah suai jenis medan indeks agar konsisten

Selepas melaksanakan pertanyaan, saya mendapati bahawa kelajuan pelaksanaan tidak dioptimumkan jadual yang direka oleh rakan sekerja saya sebelum ini dan mendapati bahawa medan jenis indeks Ia tidak konsisten, jadi saya menukarnya daripada varchar kepada int dan kemudian bertanya semula dan mendapati kelajuan pertanyaan telah dipertingkatkan dengan ketara.

Walaupun rentetan yang ditulis dalam kod java sebelum ini ditukar kepada int dalam pangkalan data, ia boleh digunakan secara normal dalam ujian semasa

Ringkasan

Selepas menyelesaikan masalah, saya membelek manual pembangunan dan mendapati bahawa spesifikasi indeks dengan jelas mewajibkan bahawa jenis data mesti konsisten semasa gabungan, dan medan yang berkaitan mesti mempunyai indeks! ! !

Pembelajaran yang disyorkan:

tutorial video mysql

Atas ialah kandungan terperinci Ringkaskan dan selesaikan perangkap mysql left join query yang lambat dan mengambil masa yang lama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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