【发布时间】:2013-12-22 02:56:39
【问题描述】:
我有一个这样的查询 -
SELECT c.msisdn,SUM(c.dataVolumeDownLink+c.dataVolumeUpLink) AS datasum
FROM cdr c
WHERE c.eveDate>='2013-10-29'
GROUP BY c.msisdn
ORDER BY datasum DESC;
这个需要 4 分钟。我有一个关于 evedate 的索引。
CDR 表包含从“2013-10-01”到“2013-10-30”每天的 2400000 条记录。但我只想选择前 100 条记录。我想如何优化这个查询。
我用过限制子句,但没有任何好处。
所以请告诉我如何优化这个查询。
谢谢。
【问题讨论】:
-
添加
LIMIT 0, 100应该可以。据我所知limit会在前100行满足要求后停止查询。 -
因为您的
datesum字段是动态计算的,所以它必须明确排序,这需要时间 - 无法解决这个问题。limit在这里帮不了你。如果您要创建查询视图,然后使用限制进行选择,您可能会看到性能提升。 -
啊,是的,这是最好的选择。创建一个视图将完成这项工作。好想法@BoristheSpider
-
@BoristheSpider 这是正确的,但我无法为 7 个不同的查询创建 7 个视图。那么除了limit和view还有什么方法可以让查询更快吗?
标签: mysql performance optimization query-optimization limit