[pgsql-jp: 40473] Re: SQLの検索性能について

中川貴 nora1962 @ cronos.ocn.ne.jp
2010年 10月 27日 (水) 06:09:22 JST


>(TBL定義)
> ===
> CREATE TABLE LOG_TBL
> (
> NODE_NAME VARCHAR(8),
> PROC_NAME VARCHAR(25),
> LOG_DATE TIMESTAMP,
> LOG_MESSAGE TEXT,
> REC_DATE TIMESTAMP
> )
> ===
> →主KEYは無く、IndexをLOG_DATE列に付与しています。
>
> これまでの調査経緯)
> ===
> 以下のSQL(ORDER BYと OFFSET/LIMITを指定したSQL)で検証
> SELECT * FROM LOG_TBL
> WHERE LOG_DATE BETWEEN [下限値] AND [上限値]
> ORDER BY LOG_DATE, REC_DATE
> OFFSET 0 LIMIT 1001;
>
> LOG_DATEの範囲を変えながら以下2種類の検索を実行
> (1) BETWEEN '2010-08-20 00:00:00' AND '2010-08-20 23:59:59' で
> 200,000件が該当し、LIMITにより直近1001件が返される検索
> (1パーティションが該当)
> (2) BETWEEN '2010-07-21 00:00:00' AND '2010-08-20 23:59:59' で
> 6,200,000件が該当し、LIMITにより直近1001件が返される検索
> (2パーティションが該当)

お疲れ様です。
まずは、実行計画を取得するところから初めてはいかがですか。
実データのソートが発生しているようなら、「LOG_DATE,REC_DATE」
に索引を変更することで改善する余地はあると思います。






pgsql-jp メーリングリストの案内