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