我有一張桌子,還有第二本書。我正在嘗試獲取學生名單以及他們擁有的書籍數量。如何改進MySQL中的SELECT子查詢?
"SELECT
StudentID,
FullName,
book_count.ct
FROM
students
LEFT JOIN (
SELECT
StudentID,
COUNT(DISTINCT id) AS ct
FROM
books
GROUP BY
StudentID
) AS book_count
ON
book_count.StudentID = students.StudentID
ORDER BY
students.FullName ASC
LIMIT 0, 30;
該查詢大約需要6秒鐘的時間才能運行,隨着更多書籍的添加,該查詢將變得越來越慢。查看查詢配置文件> 90%的時間花在「複製到臨時表」上。問題是,我的子選擇查詢獲取書籍數量,無論有多少學生可能查找,都會搜索並累計整個圖書表格,在我的情況下爲30。我該如何提高性能?謝謝。
子查詢中是否需要DISTINCT?這可能不利於任何表現。如果書籍中的記錄是基於studentID和id的唯一記錄,那麼我認爲你不需要它。我也不完全確定你需要子查詢,但我必須測試它。似乎你可能只是直接將書籍加入到學生中,按學生ID和姓名分組,然後統計書籍ID。 –