Perlahan Pertanyaan dengan Klausa ORDER BY
Pengguna pangkalan data MySQL telah menghadapi isu prestasi yang membingungkan berkaitan penggunaan klausa ORDER BY. Apabila ditambahkan pada pertanyaan kompleks dengan berbilang cantuman dan subkueri, masa pelaksanaan pertanyaan meningkat dengan ketara daripada milisaat kepada saat.
Satu kejadian khusus melibatkan pertanyaan yang mendapatkan semula data daripada tiga jadual dengan lebih kurang 40,000 baris dalam jadual terbesar. Tanpa klausa ORDER BY, pertanyaan berfungsi secara optimum. Walau bagaimanapun, apabila mana-mana lajur digunakan sebagai kriteria pengisihan, pertanyaan menjadi perlahan dengan beberapa urutan magnitud kepada sekitar 10 saat.
Punca isu ini terletak pada mekanisme pengoptimuman pangkalan data. Secara lalai, MySQL cuba mengoptimumkan pertanyaan dengan membuat jadual sementara atau menggunakan subkueri. Apabila klausa ORDER BY ditambah, pengoptimum salah mengira saiz jadual sementara yang diperlukan dan memperuntukkan jumlah memori yang tidak mencukupi. Akibatnya, pertanyaan kembali kepada algoritma pengisihan yang kurang cekap, yang mengakibatkan kelembapan yang diperhatikan.
Satu penyelesaian yang mungkin adalah dengan menulis semula pertanyaan menggunakan subkueri berkorelasi atau CTE (Ungkapan Jadual Biasa) untuk menentukan secara eksplisit langkah menyusun. Ini membolehkan pengoptimum menganggarkan saiz jadual sementara dengan betul, mengelakkan kelembapan.
Atas ialah kandungan terperinci Mengapa pertanyaan MySQL saya dengan ORDER BY sangat perlahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!