[英]Executing extremely slow MySQL query
此查詢具有多個JOIN
包括聚合函數
執行大約6000個用戶的查詢需要20秒鍾。
還有其他方法可以更快地運行此查詢嗎?
SELECT users.id, SUM(orders.totalCost) AS bought, COUNT(comment.id) AS commentsCount, COUNT(topics.id) AS topicsCount, COUNT(users_login.id) AS loginCount, COUNT(users_download.id) AS downloadsCount
FROM users
LEFT JOIN orders ON users.id=orders.userID AND orders.status=1
LEFT JOIN comment ON users.id=comment.userID
LEFT JOIN topics ON users.id=topics.userID
LEFT JOIN users_login ON users.id=users_login.userID
LEFT JOIN users_download ON users.id=users_download.userID
WHERE users.id='$userID'
GROUP BY users.id
ORDER BY `bought` DESC
運行結果說明
EXPLAIN輸出顯示您正在對除users
以外的所有內容執行全表掃描。 您需要在userID
中的所有其他表上的userID
上創建二級(非唯一)索引。 這樣可以加快對單個用戶的查詢。
但是,如果您要一次性處理所有用戶,則只需執行一次選擇,而無需WHERE users.id=
子句。 聚合每個用戶僅返回一行,因此您應該創建一個包含所有行的結果集並對其進行迭代,而不是每個用戶重新發出查詢。 在這種情況下,二級索引仍然可以提供幫助,因為可以僅從索引中確定計數,而無需查看表本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.