我有一个包含100M记录的数据库表。我有一个需要20分钟才能运行的查询 - 我怎样才能让它简单快速?
SELECT newnum,
Sum(Ceil(seconds / 60)) AS ttime
FROM astb
GROUP BY newnum
ORDER BY ttime DESC
LIMIT 100;
答案 0 :(得分:0)
ORDER BY
和LIMIT
最适合索引。因此,如果可能,您可以在列newnum
上建立索引。
另一点是你正在计算一张巨大的表中的每一条记录。我强烈建议先在临时表中选择记录,然后再对这些记录进行计算。
编辑更新的脚本:你可以像这样使用临时表:
CREATE TEMPORARY TABLE temp AS
(SELECT newnum, SUM(seconds) AS ttime
FROM astb GROUP BY newnum)
SELECT newnum, CEIL(ttime / 60) AS ttime
FROM temp
ORDER BY ttime DESC
LIMIT 100;
DROP TABLE temp;
答案 1 :(得分:0)
这不是很好的数据库设计,但你可以添加一个列来保存ceil(seconds/60)
,所以你不必一直重新计算它吗?