[pgsql-jp: 32232] 継承したテーブルでインデックスが効かない
sio-ml
sio-ml @ inter7.jp
2004年 2月 9日 (月) 21:13:07 JST
塩田です。
下記のような実験をしてみたのですが、
テーブルを継承させた場合にINDEXが効いてないようなのですが
子テーブルを作成した場合にはINDEX SCANはされないのでしょうか?
psql (PostgreSQL) 7.3.2で実験しました。
1.簡単なテーブルを作ります
create table hoge(num serial primary key,moji varchar);
create index hoge_moji_idx on hoge(moji);
2.そしてデータを挿入します。
insert into hoge(moji) values('ほげほげ');
insert into hoge(moji) values('ぱよぱよ');
3.SELECTしてみるとINDEX SCANになっている
explain analyze select moji from hoge where num=2;
QUERY PLAN
---------------------------------------------------------------------------------------------------------------
Index Scan using hoge_pkey on hoge (cost=0.00..4.82 rows=1 width=32) (actual time=0.03..0.03 rows=1 loops=1)
Index Cond: (num = 2)
Total runtime: 0.09 msec
(3 rows)
4.上記1.で作成したテーブルを継承した子テーブルを作成
create table ko_hoge () inherits( hoge );
insert into ko_hoge(moji) values('ぴよぴよ');
insert into ko_hoge(moji) values('ぺもぺも');
5.SELECTしてみるとSEQ SCANになってしまう。
explain analyze select moji from ko_hoge where num=3;
QUERY PLAN
-------------------------------------------------------------------------------------------------
Seq Scan on ko_hoge (cost=0.00..22.50 rows=5 width=32) (actual time=0.06..0.07 rows=1 loops=1)
Filter: (num = 3)
Total runtime: 0.12 msec
(3 rows)
6.さらに、4.で作成したテーブルにINDEXを作成する
create index ko_hoge_moji_idx on ko_hoge(moji);
念のためVACUUM
vacuum analyze;
7.SELECTしてみると、やはりSEQ SCANになってしまう。
explain analyze select moji from ko_hoge where num=3;
QUERY PLAN
------------------------------------------------------------------------------------------------
Seq Scan on ko_hoge (cost=0.00..1.02 rows=1 width=12) (actual time=0.03..0.03 rows=1 loops=1)
Filter: (num = 3)
Total runtime: 0.09 msec
(3 rows)
--
しお
pgsql-jp メーリングリストの案内