« Explainによるコストを取得するPL/pgSQL | トップページ | PostgreSQLでもconcatできた »

2014.09.09

PostgreSQLでは"EXISTS"は有効

古典的なSQLチューニング手法の一つにサブクエリでの条件抽出には"IN"述語で書かずに"EXISTS"述語を使え、というものがある。

これはDBMSの仕様上、IN述語ではサブクエリ内の表をすべて検索するのに対して、EXISTS述語では該当ケースを判定したら、それ以上の検索をしないからである。

で、PostgreSQLについてはVer7.4よりINでもEXISTSでも性能の差がなくなったと聞かされていたのであるが、少なくとも9.1では明らかにEXISTSに軍配があがる。

もちろんケースにもよるが、本日チューニングした事例では実行速度が10倍になった。
今日はNOTのケースだったが、NOTでないケースでも有効だった。

このあたり有意の差があるのかは不明なのと、Ver9.3ではどうなってるかはそのうち実験してみたいと思う。

|

« Explainによるコストを取得するPL/pgSQL | トップページ | PostgreSQLでもconcatできた »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/60290170

この記事へのトラックバック一覧です: PostgreSQLでは"EXISTS"は有効:

« Explainによるコストを取得するPL/pgSQL | トップページ | PostgreSQLでもconcatできた »