[pgsql-jp: 37048] Re: SELECTの性能

河本陽一 komoto.yoichi @ kcc.co.jp
2006年 5月 16日 (火) 16:19:04 JST


こうもとです。

根岸 智幸 さんの書いたこと:
> (1)
> f1の順スキャンよりも、f6のソートのほうが時間がかかっていま 
> すね。
> f6にもインデックスを張った方がいいと思います。

 ソートにはインデックスは使用されないという記述があったので作成して
いませんでした。

●PostgreSQL FAQ (4.6参照)
http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.txt

 念のため作成してみましたが変化はありませんでした。


> (2)
> また、sql実行前に、
> 
> set enable_seqscan to off;
> 
> とすることで、強制的にインデックススキャンにできませんか?

 できました!! 圧倒的に早くなりました。
 EXPLAIN ANALYZEは以下のようになりました。

 Limit  (cost=2706.08..2706.83 rows=300 width=142) (actual time=100.935..137.584 rows=300 loops=1)
   ->  Sort  (cost=2706.08..2707.40 rows=531 width=142) (actual time=100.858..113.818 rows=300 loops=1)
         Sort Key: t1.f6
         ->  Nested Loop  (cost=0.00..2682.04 rows=531 width=142) (actual time=0.237..72.676 rows=509 loops=1)
               ->  Index Scan using t2_f2_idx on t2  (cost=0.00..8.64 rows=3 width=28) (actual time=0.056..0.188 rows=3 loops=1)
                     Index Cond: (f2 = 'xxx'::text)
               ->  Index Scan using t1_f1_idx on t1  (cost=0.00..888.82 rows=185 width=118) (actual time=0.052..7.679 rows=170 loops=3)
                     Index Cond: (t1.f1 = "outer".f1)
                     Filter: ((f3 = 0) AND (f4 = false) AND (f5 IS NOT NULL))
 Total runtime: 150.326 ms

 この性能でしたら、十分実用的です。
 ありがとうございました。


======================================================================
河本陽一(こうもとよういち)
mailto:komoto.yoichi @ kcc.co.jp




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