[pgsql-jp: 38722] Re: ソートとインデックスの関係

藤澤 qsecofr1 @ hotmail.com
2007年 9月 3日 (月) 15:39:34 JST


藤澤です。

プランナーは、シーケンシャルスキャンとインデックススキャンの
両方で実行計画を作成して、その内、最速のものを使うそうです。
VACUUM ANALYZE を定期的に実行することで、改善されないでしょうか?


/藤澤



On Mon,  3 Sep 2007 15:42:17 +0900 (JST)
"YAMANEKO/Mao" <yneko2 @ yamamaya.com> wrote:

> たびたびお世話になっております、もりもとです。
> 
> 諸般の事情でいまだに、PostgreSQL 7.4.7を使っているのですが・・・
> クエリプランナーをうまく手なずけられず、困っています。
> 以下のようなテーブルで・・・
> 
>             Table "public.maillist"
>    Column   |          Type           | Modifiers
> ------------+-------------------------+-----------
>  session_id | character(65)           | not null
>  rcv_date   | character(24)           | not null
>             | 以下略                  |
> Indexes:
>     "i_maillist" btree (session_id)
>     "i_maillist2" btree (rcv_date)
> 
> 以下のようなクエリを実行しようとすると、
> 何度、vacume analyzeしても、
> シーケンシャルスキャンを止めようとしません。
> 
>   select  *
>   from    maillist
>   where   session_id = '1'
> 
> 以下のクエリでは、シーケンシャルスキャン+ソートとなって、
> 非常に遅くなります。
> 
>   select  *
>   from    maillist
>   order   by rcv_date
> 
> 強制的に、
> 
>   set enable_seqscan to false
> 
> を設定すると、両クエリともインデックススキャンになって、
> 十倍以上高速になるのですが・・・
> 以下のようなクエリだと、
> やはり、i_maillist でインデックススキャンをした後に rcv_dateでソート、
> という形になって、遅くなってしまいます。
> 
>   select  *
>   from    maillist
>   where   session_id = '1'
>   order   by rcv_date
> 
> session_idによっては「ごく希」に i_maillist2 と i_maillist1 を使った
> インデックススキャンになるので、プランナのパラメータの問題?
> というような気がするのですが・・・
> 
> どうやったらうまく、プランナを手なずけれるでしょうか?
> 
> あるいは、作業コストとの兼ね合いもあるので要検討ですが・・・
> PostgreSQL 8にアップグレードするとこのあたりが改善されるとか、
> ありますでしょうか?
> 
> - YAMANEKO / Mao
> http://yamamaya.com/
> http://wiki.livedoor.jp/yamamaya_com/






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