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