Mysql数据库庞大记录
问题描述:
我有一个包含100M记录的数据库表。我有一个需要20分钟才能运行的查询 - 我怎样才能简单快捷?Mysql数据库庞大记录
SELECT newnum,
Sum(Ceil(seconds/60)) AS ttime
FROM astb
GROUP BY newnum
ORDER BY ttime DESC
LIMIT 100;
答
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;
答
这不是很大的数据库设计,但可以添加一个列,以保存ceil(seconds/60)
,所以你不必重新计算其所有时间?
你有没有索引在桌子上? – Bridge 2012-08-01 08:56:17
您是否在该查询中缺少GROUP BY? – Barmar 2012-08-01 09:08:06
@Barmar我已更新我的查询。 – 2012-08-01 09:22:10