我有一個包含100M記錄的數據庫表。我有一個需要20分鐘才能運行的查詢 - 我怎樣才能簡單快捷?Mysql數據庫龐大記錄
SELECT newnum,
Sum(Ceil(seconds/60)) AS ttime
FROM astb
GROUP BY newnum
ORDER BY ttime DESC
LIMIT 100;
我有一個包含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