[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 メーリングリストの案内