Prestasi Lambat Apabila Menggunakan ORDER BY dalam Pertanyaan Kompleks
Dalam pertanyaan kompleks dengan berbilang cantuman dan subquery, menambah klausa ORDER BY boleh membawa kepada masa pelaksanaan yang jauh lebih perlahan. Isu ini telah dilaporkan dalam pertanyaan yang mengandungi empat jadual dan hanya mengembalikan 13 baris. Pertanyaan berjalan dengan pantas tanpa klausa ORDER BY tetapi menjadi lembap apabila ia ditambahkan.
Penyelesaian
Untuk menyelesaikan isu prestasi ini, adalah disyorkan untuk membungkus pertanyaan dengan subquery dan gunakan klausa ORDER BY pada pertanyaan luar. Berikut ialah pertanyaan yang diubah suai:
SELECT * FROM ( SELECT Course.CourseID, Course.Description, UserCourse.UserID, UserCourse.TimeAllowed, UserCourse.CreatedOn, UserCourse.PassedOn, UserCourse.IssuedOn, C.LessonCnt FROM UserCourse INNER JOIN Course USING(CourseID) INNER JOIN ( SELECT CourseID, COUNT(*) AS LessonCnt FROM CourseSection GROUP BY CourseID ) C USING(CourseID) WHERE UserCourse.UserID = 8810 ) ORDER BY CourseID;
Penjelasan
Sebab penyelesaian ini berfungsi ialah ia membenarkan pengoptimum menilai subkueri secara bebas daripada operasi ORDER BY. Ini menghasilkan pelan pelaksanaan yang lebih cekap yang tidak terjejas oleh operasi ORDER BY yang perlahan.
Atas ialah kandungan terperinci Mengapa pertanyaan SQL saya lambat dengan ORDER BY, dan bagaimana saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!