簡體   English   中英

執行極慢的MySQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM