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