[pgsql-jp: 37488] Re: SQLの実行速度について

Yoshio Kano kano @ arcadia21.com
2006年 8月 25日 (金) 18:00:35 JST


加納です。

太田様、ありがとうございます。
そしてお返事が遅くなりまして申し訳ないです。


頂いたSQLを早速試してみました。
ちょっと考えつかなかったやり方です。
サブクエリでテーブルを抽出する、というのは同じですが・・・。
ただEXPLAIN ANALYZEをした場合、24875ms という値が返ってきて
しまいました・・・(;_;)


REINDEXでインデックスを張り直し、複合インデックスも作成
したのですが、group by句でシーケンシャルスキャンを
行っていますので、それが原因なのかな?と思います。
これまでに色々行ってきまして、データのGROUP(SORT)に非常に
時間がかかってしまっているようです。

とはいえ、確か過去のメーリングリストで読んだ限りでは、
7.4以降でHashAggregateを使用してGroupByの速度が上がる、
とあったような・・・
既に他のシステムも動いているので、検証無しに、というのは
怖いですが、どれくらいまで速度が上がるのか、非常に気に
なるところです。

# この際、一気にバージョンを上げてしまおうかともくろんで
# おります。。。
# 試したらまたご報告いたします。


気になったのが、7.3.9でもmax(id)でインデックススキャンが
使用されていました???
和山様の[pgsql-jp: 37457]で書かれていました、「8.1以降で
max(),min()でインデックスを使用可能」ということと矛盾している?
とか思っています。


補足ですが・・・
現在、とりあえず、商品マスタに一時的に最新データを格納する
やり方で検索速度を保っています。



> こんにちは。太田と申します。
> 
> 手元にOracleしかないのですが
> postgresでもスカラーサブクエリが使えるなら以下のような
> 感じではどうでしょうか?
> 
> SELECT *
> FROM history t4
>     JOIN
>     (SELECT
>         (SELECT max(id) as id
>          FROM history t1
>          WHERE t1.item_id = t2.item_id) as id
>      FROM
>         (SELECT item_id FROM history GROUP BY item_id) t2
>     )
>     t3
>     ON (t4.id = t3.id)
> 
> [前提]
> ・idにインデックスを作成
> ・item_id, idに結合インデックスを作成




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