Mysql数据库庞大记录

Mysql数据库庞大记录

问题描述:

我有一个包含100M记录的数据库表。我有一个需要20分钟才能运行的查询 - 我怎样才能简单快捷?Mysql数据库庞大记录

SELECT newnum, 
     Sum(Ceil(seconds/60)) AS ttime 
FROM astb 
GROUP BY newnum 
ORDER BY ttime DESC 
LIMIT 100; 
+0

你有没有索引在桌子上? – Bridge 2012-08-01 08:56:17

+0

您是否在该查询中缺少GROUP BY? – Barmar 2012-08-01 09:08:06

+0

@Barmar我已更新我的查询。 – 2012-08-01 09:22:10

ORDER BYLIMIT最适合索引。所以如果可能的话,你可以在列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; 
+0

ttime不是一列,它是总和的结果。 – Barmar 2012-08-01 09:07:16

+0

我已将此表编入索引,但它占用了太多时间。 我怎样才能做临时表... – 2012-08-01 09:26:03

+0

我编辑了列名。如果你已经有索引,那么值得尝试临时表而不是计算。在这种情况下,它很复杂,因为您想按计算字段进行排序和限制。我想你可以尝试在一个临时表中插入总和,然后将其转换秒并从临时表中排序?是否有意义? – huzeyfe 2012-08-01 09:29:47

这不是很大的数据库设计,但可以添加一个列,以保存ceil(seconds/60),所以你不必重新计算其所有时间?