[pgsql-jp: 41596] Re: order by での indexの利用について

花田 茂 hanada @ metrosystems.co.jp
2014年 3月 14日 (金) 16:50:40 JST


花田です。

(2014/03/14 15:00), prod2011 @ yahoo.co.jp wrote:
> ここで、order by のb.col6があるとき、ないとき、で全然速度がことなります。
> 目標としている速度は、2以内秒 です。

そもそも、仕様上 b.c6でソートした結果が必要なのであれば、遅いほうのクエ
リが本来の性能ではないでしょうか(ORDER BYからb.c6を外した結果は本来取得
すべきものとは異なっているのだと思います)。b.c6とb.c1の相関によっては
ORDER BYで省略してもよいかもしれませんが、これは許容されるチューニングな
のでしょうか?(なんとなく違う気がしています)

それは置いておいて…

今回のケースの性能差ですが、遅い実行計画(ORDER BY b.c6あり)ではLimit前に
aとbの結合結果全件をソートする必要があるのに対して、早い実行計画(ORDER
BY b.c6なし)ではa.c4, a.c5でのソートをインデックスで保証しており、結合結
果の最初の500件を取得した時点で両テーブルのスキャンを途中で止められてい
ることが大きなポイントだと思います。これにより、スキャンコストだけでなく
結合コストも大きく削減できています。

b.c6でのソートをしたうえで大幅に早くするには、テーブル設計を見直す必要が
あるかもしれません。

-- 
株式会社メトロシステムズ
  花田 茂
Mail : hanada @ metrosystems.co.jp
 Tel : 03-5951-1219
 Fax : 03-5951-2929


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