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

prod2011 @ yahoo.co.jp prod2011 @ yahoo.co.jp
2014年 3月 13日 (木) 11:32:02 JST


こんにちは、prodと申します。

テーブルを連結してOrder byした後で、limit かけて500件表示

といった処理をしていますがデータの取得が遅く、
困っています。

環境は以下です

サーバOS:Red Hat Enterprise Linux Server release 5.3
Postgresバージョン:PostgreSQL 9.1.2

具体的には以下のようなSQLです

select
a.col1
,a.col2
,a.col3
,b.col1
,b.col2
from table_a a
inner join table_b b (a.col1=b.col1)
order by a.col1,a.col2,b.col1
offset 0 limit 500


table_a には  a.col1,a.col2 で indexを作成しており、
table_b には  b.col1 で indexを作成しております。
(index は btreeです)

このまま実行すると、データの取得に時間がかかり、
困っています。


order byからb.col1を除くと、Order byで、
a.col1,a.col2のindexを使ってくれるようになり、非常に高速となるのですが、
b.col1を order by に追加すると、indexを使ってくれません。


order by a.col1,a.col2,b.col1
としても、 a.col1,a.col2 のindexは使ってくれる。
といったようにはならないものなのでしょうか?
また、他の方法でもいいですが、高速かすために良い方法は

ございますでしょうか?

件数:table_a 20万件
      table_b 100万件
程度です。

アドバイスいただけますと、幸いです。


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