0

1 億レコードを含むデータベース テーブルがあります。実行に 20 分かかるクエリがあります。どうすればクエリを簡単かつ迅速に実行できますか?

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

2 に答える 2

0

これは優れたデータベース設計ではceil(seconds/60)ありませんが、保持する列を追加して、常に再計算する必要がないようにすることはできますか?

于 2012-08-01T09:27:17.193 に答える
0

ORDER BYLIMITインデックスで最適に機能します。したがって、可能であれば、列にインデックスを付けることができますnewnum

もう 1 つのポイントは、巨大なテーブル内のすべてのレコードを計算していることです。これらのレコードで計算を行うよりも、最初に一時テーブルのレコードを選択することを強くお勧めします。

EDIT UPDATED SCRIPT: 次のように一時テーブルを使用できます。

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;
于 2012-08-01T09:00:41.497 に答える