[pgsql-jp: 36248] インデックステーブルが使われない理由?

hogehoge kazubonbonk @ yahoo.co.jp
2005年 10月 21日 (金) 23:01:01 JST


木村@横河電機です。
お世話になります。

つい3日前このMLで、PostgreSQLでindexを使うにはvacuum
analayze
が必要と知り、
粟食ってます。
explain analyzeでindexテーブルが使われているかどうか要調
査と言うことで、
色々と調べ始めたのですが、indexテーブルが使われない場合
がある事が分かり、
質問させて頂きます。

環境は、Vine Linux 2.6/PostgreSQL 2.4.3です。
個人情報をcsinfoというテーブルに格納しています。
住所をcsinfoの3個のカラムに登録しています。
カラムaddr1は、都道府県名です。(例 東京都、北海道等)
カラムaddr2は、市町村名です。(例 千代田区麹町2−3−
1)
カラムaddr3は、アパート名等です。(例 ほげほげアパート
2−1)

addr1からaddr3についてそれぞれindex tableを作成しました
。
下記に結果を示します。

hogedb=> \di
              リレーション一覧
        名前        |      型      | 所有者  
--------------------+--------------+---------
 d_csinfo_addr1     | インデックス | kimkazu
 d_csinfo_addr2     | インデックス | kimkazu
 d_csinfo_addr3     | インデックス | kimkazu

addr3を検索条件に指定すると、index tableが使われているの
が確認できました。

hogedb=> explain analyze select addr3 from csinfo where
addr3 = '
北府中';
NOTICE:  QUERY PLAN:

Index Scan using d_csinfo_addr3 on csinfo 
(cost=0.00..25.70 rows=12 width=18) (actual
time=0.04..0.04 rows=1 loops=1)
Total runtime: 0.12 msec

addr1を検索条件に指定すると、index tableのd_csinfo_addr1
が使われていないことが
確認できました。

hogedb=> explain analyze select addr1 from csinfo where
addr1 = '
東京都';
NOTICE:  QUERY PLAN:

Seq Scan on csinfo  (cost=0.00..2308.16 rows=7015
width=21) (actual time=0.06..79.00 rows=7255 loops=1)
Total runtime: 87.75 msec

addr1には、47都道府県名のみがランダムに登録されていま
す。
index tableのハッシュ値も同じのがいっぱい有るんでしょう
ね。
だからといって、index tableを使わないのは納得できません
。

index tableが使われない理由をご存じの方、教えて下さい。
よろしくお願いします。




--------------------------------------
Know more about Breast Cancer
http://pr.mail.yahoo.co.jp/pinkribbon/




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