[pgsql-jp: 32540] Re: インデックスが使用されません。

gotou gotou @ hokkou.co.jp
2004年 3月 23日 (火) 10:13:37 JST


おはようございます、ごとうです。

複合インデックスを作成して、試してみましたが、
多少検索スピードが上がったような感じではありましたが、
やはり、インデックスは使用されず、結果が出るのに
一分前後かかってしまうようです。
**********************************************************************
postrn=# create index postrn_idxes on postrn(br_cd, yy);
CREATE INDEX
postrn=# vacuum verbose analyze postrn;
INFO:  --Relation public.postrn--
INFO:  Pages 123678: Changed 0, Empty 0; Tup 3276136: Vac 0, Keep 0, UnUsed
0.
        Total CPU 1.83s/0.51u sec elapsed 42.45 sec.
INFO:  Analyzing public.postrn
VACUUM
postrn=# explain analyze
postrn-# select mm, count(d_index) from postrn where br_cd=101 and yy=2002
group by mm order by mm;
                                                             QUERY PLAN
----------------------------------------------------------------------------
----------------------------
 Aggregate  (cost=241314.20..245376.61 rows=54165 width=18) (actual
time=45784.32..47569.88 rows=12 loops=1)
   ->  Group  (cost=241314.20..244022.47 rows=541654 width=18) (actual
time=45623.14..47130.67 rows=549806 loops=1)
         ->  Sort  (cost=241314.20..242668.34 rows=541654 width=18) (actual
time=45623.13..46165.62 rows=549806 loops=1)
               Sort Key: mm
               ->  Seq Scan on postrn  (cost=0.00..164629.70 rows=541654
width=18) (actual time=0.04..43603.34 rows=549806 loops=1)
                     Filter: (br_cd = 101)
 Total runtime: 47578.05 msec
(7 rows)
*********************************************************************
一応、(yy, br_cd) だけでなく、(yy, mm) (mm, br_cd) なども、作成して
試してみたのですが、結果は似たようなものでした。

仕方ないので、今は必要なデータだけを抜き出したテーブルを作成して、
そちらのテーブルでデータを拾うようにしています。
元々実用ではなく、ただサンプルデータを拾いたかっただけだったので
今はそれで用は足りているのですが、もし後にこのテーブルを使用する
ことになった場合、300万件でインデックス検索がされないと、
実用はできないと思っています。

コレは、もりもと様のいうとおりに、インデックスを複合インデックスで
作成するようにしたほうが良いのでしょうか。
> PostgreSQLのオプティマイザは、インデックスで一致するレコードがある程度より
>> いとインデックススキャンよりシーケンシャルスキャンのほうが効率的だと判断す
>> ようです。
〜
> むしろ、br_cd と yy で複合インデックスを作るなどで、一つの問い合わせの際に
>> ンデックスで一致するレコード数を減らすようにした方がいいと思います。
>
# けどそれも、検索条件で指定されなかったら意味ないんですよね...
# 300万件がネックなのか、検索条件が少ないのがネックなのか...

とりあえずは、切羽詰った状況ではないので、暇を見ていろいろ試してみようと
思います。
ご助言くださったもりもと様、Mashiki様、石田様、ありがとうございました。




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