※ ChatGPTを利用し、要約された質問です(原文:前方一致が動的に変更される場合にINDEXは有効になりません。)
LIKE検索におけるINDEXの有効化について
このQ&Aのポイント
テーブル同士のLIKE検索(前方一致)を行った場合、INDEXが有効になりません。
LIKE検索文字列を固定にした場合は、INDEXが有効になります。
テーブル同士のLIKE(前方一致)でINDEXを有効にする手段をご教授頂けないでしょうか。
前方一致が動的に変更される場合にINDEXは有効になりません。
いつもお世話になっております。
テーブル同士のLIKE検索(前方一致)を行った場合、
INDEXが有効になりません。
LIKE検索文字列を固定にした場合は、INDEXが有効
になります。
テーブル同士のLIKE(前方一致)でINDEXを
有効にする手段をご教授頂けないでしょうか。
以下、実行結果です。
(1)LIKE検索文字列が固定
----------------------------------------------------------------------------
EXPLAIN
SELECT * FROM wk_dss_data WHERE sys_id LIKE 'M004964%';
----------------------------------------------------------------------------
Index Scan using i_wk_dss_data_02 on wk_dss_data (cost=0.00..5.25 rows=1 width=311)
Index Cond: (((sys_id)::text >= 'M004964'::character varying) AND ((sys_id)::text < 'M004965'::character varying))
Filter: ((sys_id)::text ~~ 'M004964%'::text)
(2)テーブル同士のLIKE検索
----------------------------------------------------------------------------
EXPLAIN
SELECT wk_dss_data.comp_id, wk_dss_data.user_id FROM wk_dss_data, t_update
WHERE
wk_dss_data.sys_id LIKE t_update.sys_id||'%';
----------------------------------------------------------------------------
Nested Loop (cost=157.00..12505636.00 rows=2500000 width=20)
Join Filter: (("outer".sys_id)::text ~~ (("inner".sys_id)::text || '%'::text)
)
-> Seq Scan on wk_dss_data (cost=0.00..5479.00 rows=100000 width=31)
-> Materialize (cost=157.00..207.00 rows=5000 width=11)
-> Seq Scan on t_update (cost=0.00..157.00 rows=5000 width=11)
お礼
DQ9さん お世話になりました。 明確な回答有難うございます。 インデックスを再作成し再度実行してみます。
補足
DQさん お世話になります。 以下のインデックスを作成し実行しましたが インデックスが使われませんでした。 ほかに考慮点ございましたらご教授頂けると 幸いです。 以下、インデックス作成 create index i_test ON t_update (sys_id varchar_pattern_ops); create index i_test2 ON wk_dss_data (sys_id varchar_pattern_ops);