インデックスについて
テーブルは2つ
・offacc_siwakedata
・off_projectmster
とあり、それぞれ下記インデックスを張っております。
create index siwakedata_index
ON offacc_siwakedata(
siwakedata_date,
siwakedata_hdcd,
siwakedata_cd,
siwakedata_kamokucode,
siwakedata_projectcode,
siwakedata_exzankada,
siwakedata_default,
siwakedata_compcd,
siwakedata_del
);
CREATE INDEX projectmster_index
ON off_projectmster(
projectmster_cd,
projectmster_del,
projectmster_compcd
);
2つのテーブルを結合させる下記SQLを発行
explain
select
offacc_siwakedata.*,
off_projectmster.projectmster_name
from offacc_siwakedata,off_projectmster
where
off_projectmster.projectmster_cd=siwakedata_projectcode
and
off_projectmster.projectmster_del='1'
and
off_projectmster.projectmster_compcd='200'
and
siwakedata_compcd='200'
and
siwakedata_del='1'
and
siwakedata_default='1'
and
siwakedata_kamokucode='26300'
and
siwakedata_exzankada<>0
order by
siwakedata_date,
siwakedata_hdcd,
siwakedata_cd
;
explainするとoff_projectmsterのインデックスが有効になっていません。
何ででしょうか?
教えてください。
宜しくお願いします。
"Nested Loop (cost=0.00..17438.04 rows=1 width=1307)"
" Join Filter: ((off_projectmster.projectmster_cd)::text = (offacc_siwakedata.siwakedata_projectcode)::text)"
" -> Index Scan using siwakedata_index on offacc_siwakedata (cost=0.00..17436.98 rows=1 width=1244)"
" Index Cond: (((siwakedata_kamokucode)::text = '26300'::text) AND ((siwakedata_default)::text = '1'::text) AND ((siwakedata_compcd)::text = '200'::text) AND (siwakedata_del = 1))"
" Filter: (siwakedata_exzankada <> 0::numeric)"
" -> Seq Scan on off_projectmster (cost=0.00..1.04 rows=1 width=96)"
" Filter: ((projectmster_del = 1) AND ((projectmster_compcd)::text = '200'::text))"
お礼
早速のご回答ありがとうございます。 マニュアルに書いてありましたか・・・ 読み落としました。 前方一致ができないとなると、 別の方法を考えたいと思います。