Rumah > pangkalan data > tutorial mysql > Mengapa pertanyaan SQL saya lambat dengan ORDER BY, dan bagaimana saya boleh membetulkannya?

Mengapa pertanyaan SQL saya lambat dengan ORDER BY, dan bagaimana saya boleh membetulkannya?

Barbara Streisand
Lepaskan: 2024-12-04 04:20:11
asal
489 orang telah melayarinya

Why is my SQL query slow with ORDER BY, and how can I fix it?

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan