3

テーブルに 1,000 万件を超えるレコードがあります。

SELECT * FROM tbl ORDER BY datecol DESC
LIMIT 10
OFFSET 999990

Explain.depesz.comEXPLAIN ANALYZEの出力。 上記のクエリの実行には約 10 秒かかります。どうすればこれをより速くすることができますか?

アップデート

サブクエリを使用すると、実行時間が半分に短縮されます。

SELECT * FROM tbl where id in 
(SELECT id FROM tbl ORDER BY datecol DESC LIMIT 10 OFFSET 999990)

Explain.depesz.comEXPLAIN ANALYZEの出力。

4

2 に答える 2

2

で使用される列にインデックスを作成する必要がありますORDER BY。理想的には同じソート順ですが、PostgreSQLはほぼ同じ速度でインデックスを逆方向にスキャンできます。

CREATE INDEX tbl_datecol_idx ON tbl (datecol DESC);

インデックスCREATE INDEX現在のマニュアルの詳細。
でテストしEXPLAIN ANALYZEて、クエリプランに加えて実際の時間を取得します。

もちろん、パフォーマンスの最適化に関する通常のアドバイスもすべて当てはまります。

于 2013-03-16T01:53:44.580 に答える