繁体   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