アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
テーブル同士の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)

A 回答 (2件)

私も、以前同じ現象になって調べました。



PostgreSQLでは、like検索には通常のindexは使われないようです。
versionは、8.0.xでした。
likeを使うようにインデックスを作成するにはvarchar_pattern_opsオプションを付けます。

<code>
CREATE INDEX test_index ON test_table (col varchar_pattern_ops);
</code>

詳しくは参考URLを見てみてください。

参考URL:http://www.postgresql.jp/document/pg803doc/html/ …

この回答への補足

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);

補足日時:2006/03/08 08:59
    • good
    • 0
この回答へのお礼

DQ9さん
お世話になりました。
明確な回答有難うございます。
インデックスを再作成し再度実行してみます。

お礼日時:2006/03/08 08:51

私はこれで解決できたのですが、別の問題なのでしょうか。


あとはPostgreSQLのオプティマイザですね。
Alanizeオプションをつけてvacuumを実行してみてはどうでしょうか。

参考URL:http://www.postgresql.jp/document/pg732doc/refer …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!