Soalan COUNT(*) Lambat dalam MySQL dengan Klausa Where
Apabila berurusan dengan pertanyaan MySQL yang lembap melibatkan COUNT(*), memahami asasnya faktor diutamakan. Dalam kes khusus ini, masa pelaksanaan yang panjang tidak kelihatan serta-merta daripada pertanyaan itu sendiri atau pernyataan EXPLAIN.
Memahami Isu
Jadual yang dimaksudkan, change_event, mempunyai kunci utama berkelompok pada lajur change_event_id. Dalam InnoDB, kunci utama berkelompok disimpan bersama data dalam halaman data, tidak seperti indeks bukan berkelompok yang berada dalam halaman indeks yang berasingan.
Masalah Imbasan Julat pada Kunci Utama Berkelompok
Pertanyaan yang dibentangkan melakukan imbasan julat pada kunci primer berkelompok, di mana ia perlu mengimbas sebahagian besar jadual. Ini boleh memakan masa kerana halaman data mungkin tidak disimpan secara fizikal dalam tertib diisih, menyebabkan operasi I/O tambahan.
Penyelesaian Potensi
Untuk mengoptimumkan ini pertanyaan, pertimbangkan untuk melaksanakan satu atau kedua-dua strategi berikut:
Nota Tambahan:
Pertimbangkan untuk mengubah suai lajur change_event_id menjadi BIGINT UNSIGNED jika ia sememangnya lajur peningkatan automatik bermula dari sifar. Ini akan menghalang kemungkinan isu dengan limpahan integer yang ditandatangani.
Atas ialah kandungan terperinci Mengapa Pertanyaan COUNT(*) Saya dengan Klausa WHERE Lambat dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!