使用GROUPBY时,mySQL查询速度非常慢
我在尝试优化使用GROUPBY函数的查询时遇到了一些问题使用GROUPBY时,mySQL查询速度非常慢,mysql,group-by,query-optimization,Mysql,Group By,Query Optimization,我在尝试优化使用GROUPBY函数的查询时遇到了一些问题 SELECT COUNT(*) AS count, snapshot_id, date_sent, subject, name FROM snapshots INNER JOIN brands ON snapshots.brand_id = brands.brand_id WHERE snapshots.status = 1 AND brands.status = 1 GROUP BY subject ORDER BY date_sent
SELECT COUNT(*) AS count, snapshot_id, date_sent, subject, name
FROM snapshots
INNER JOIN brands
ON snapshots.brand_id = brands.brand_id
WHERE snapshots.status = 1 AND brands.status = 1
GROUP BY subject
ORDER BY date_sent DESC
LIMIT 10;
两张桌子
[Table: snapshots]
snapshot_id subject date_sent brand_id status
1 abc 2015-2-1 1 1
2 abc 2015-2-2 1 1
3 xyz 2015-2-3 2 1
4 xyz 2015-2-4 2 1
5 xyz 2015-2-5 3 1
[Table: brands]
brand_id name status
1 nike 1
2 adidas 1
3 puma 1
结果:
count snapshot_id date_sent subject name
2 1 2015-2-1 abc nike
2 3 2015-2-3 xyz adidas
1 5 2015-2-5 xyz puma
没有限制的查询返回70K+条记录。
在没有组的情况下执行时,查询返回时不会出现任何问题。
在按主题分组执行时,查询速度非常慢
非常感谢您的帮助。您是如何创建表格的?任何索引包括?使用
GROUP BY
子句,数据库必须搜索所有条目-如果您在不使用GROUP BY
的情况下运行查询,则数据库可能会在您浏览记录时返回记录。最有可能的是索引ALTER TABLE snapshots ADD KEY(主题、发送日期)
会加快查询速度,如果还没有,显示你的索引和解释结果。“你的聚合和非聚合结果的混合看起来很奇怪。@Mihai,这很有效。”。为将来的参考和我的进步。创建索引时我应该寻找什么?我如何知道索引中应该包括哪些列?WHERE united by AND中所有列的合成索引,GROUP by和ORDER by列的合成索引,按它们出现的顺序排列,前提是它们在同一个表中。有很多东西,了解基数和索引实际上是什么。花些时间阅读那些枯燥的文档并试着理解它。使用解释计划。