いつもお世話になっております。
テーブル同士の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)
No.1ベストアンサー
- 回答日時:
私も、以前同じ現象になって調べました。
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);
No.2
- 回答日時:
私はこれで解決できたのですが、別の問題なのでしょうか。
あとはPostgreSQLのオプティマイザですね。
Alanizeオプションをつけてvacuumを実行してみてはどうでしょうか。
参考URL:http://www.postgresql.jp/document/pg732doc/refer …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルからのselectにおいて...
-
postgreSQLのint型は桁数指定が...
-
pl/pgsqlで変数の扱い
-
賢いSQL文がわからない
-
クエリアナライザのsp_helpコマ...
-
UNIQUEをつけたときのINDEXテー...
-
SQL文の実行に苦労しています。
-
2つの異なるテーブルを和結合し...
-
INDEXの無効化
-
異なるスキーマからデータを抽...
-
データを削除しても表領域の使...
-
ORA-00959: 表領域'****'は...
-
datapumpの実行方法について
-
SQLでスキーマ名(所有者名)の...
-
INSERT時に発番を行いたい
-
[性能改善]AccessのDBに大量の...
-
oracle sqlで先頭の1件を取得
-
count(1)とcount(*)の違い
-
Access レコードを追加できませ...
-
特定のスキーマのテーブルを一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
PostgressからMySQL(MariaDB)...
-
UNIQUEをつけたときのINDEXテー...
-
クエリアナライザのsp_helpコマ...
-
SQL SELECT文 別テーブルのレコ...
-
SQL文作成のお願い
-
3つのテーブルの処理について
-
全テーブルのデータの行数
-
SQLで検索結果の記事を表示したい
-
近い時間によるテーブル結合
-
PostgresSQL8.4でツリー上に取...
-
SELECT結果から重複行を除く方法
-
Perl DBI でSELECT ilikeの結果...
-
2つの異なるテーブルを和結合し...
-
賢いSQL文がわからない
-
チェックボックスから、データ...
-
Viewにインデックスは張れ...
-
データを削除しても表領域の使...
-
異なるスキーマからデータを抽...
おすすめ情報