Rumah  >  Artikel  >  pangkalan data  >  Mengapa Pertanyaan COUNT(*) Saya dengan Klausa WHERE Lambat dalam MySQL?

Mengapa Pertanyaan COUNT(*) Saya dengan Klausa WHERE Lambat dalam MySQL?

DDD
DDDasal
2024-11-02 09:20:03499semak imbas

Why is My COUNT(*) Query with a WHERE Clause Slow in MySQL?

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:

  1. Jadual Optimumkan: Menjalankan OPTIMIZE TABLE membina semula halaman data jadual, memastikan ia diisih mengikut kunci utama, yang berpotensi mempercepatkan imbasan julat.
  2. Buat Indeks Tambahan: Menambah indeks bukan utama semata-mata pada lajur change_event_id akan membolehkan MySQL mengimbas halaman indeks dengan cepat dan bukannya halaman data. Ini boleh memberikan peningkatan prestasi yang ketara.

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!

Kenyataan:
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