[pgsql-jp: 26708] Re: Likeの部分一致で検索
Hashimoto, Masaru
hashimoto-m @ comtecc.net
2002年 7月 17日 (水) 12:21:28 JST
橋本です。
新井様、返信ありがとうございます。
> どこかpostgresは他のDBよりクエリが遅くなりやすい印象があります。
> 頻繁にvacuumやvacuum fullを行っていますか?
> これをやらないと、すぐに遅くなってしまうようです。
>
vacuumは、毎日深夜にスケジュールで起動実行させています。
大量のデータ更新は一日一回しかやらないので問題ないかなと。
また、vacuum fullについては、データのロックがかかってしまうので
頻繁には行っていません。
ただ、現在はテスト的にvacuum fullを毎日かけています。
(vacuumの代わりにvacuum fullをしています)
> 実際のSQL文と、explain analyzeの結果はどうなっていますか?
>
長くなってしまいましたが、以下に実際のSQL文を記述します。
・キーワードは[windows][ウィンドウズ][ウインドウズ]です。
・すべてORで検索しています。
・キーワードにひとつでもアルファベットがあったらILIKEにしています。
・このテーブルにインデックスは張っていません。
・ちなみに、キーワードを[windows]だけにしてみると、
カウントとレコード取得であわせて5秒くらいで帰ってきます。
==ヒット件数取得==
SELECT Count(*) As cnt FROM tbl
WHERE
( (
tbl.keyword1 ILIKE '%windows%'
OR tbl.keyword2 ILIKE '%windows%'
OR tbl.keyword3 ILIKE '%windows%'
OR tbl.keyword4 ILIKE '%windows%'
OR tbl.keyword5 ILIKE '%windows%'
OR tbl.keyword6 ILIKE '%windows%'
OR tbl.keyword7 ILIKE '%windows%'
OR tbl.keyword8 ILIKE '%windows%'
OR tbl.keyword9 ILIKE '%windows%'
OR tbl.keyword10 ILIKE '%windows%'
OR tbl.keyword11 ILIKE '%windows%'
OR tbl.keyword12 ILIKE '%windows%'
OR tbl.keyword13 ILIKE '%windows%'
OR tbl.keyword14 ILIKE '%windows%'
OR tbl.keyword15 ILIKE '%windows%'
OR tbl.keyword16 ILIKE '%windows%'
OR tbl.keyword17 ILIKE '%windows%'
OR tbl.keyword18 ILIKE '%windows%'
) OR (
tbl.keyword1 LIKE '%ウインドウズ%'
OR tbl.keyword2 LIKE '%ウインドウズ%'
OR tbl.keyword3 LIKE '%ウインドウズ%'
OR tbl.keyword4 LIKE '%ウインドウズ%'
OR tbl.keyword5 LIKE '%ウインドウズ%'
OR tbl.keyword6 LIKE '%ウインドウズ%'
OR tbl.keyword7 LIKE '%ウインドウズ%'
OR tbl.keyword8 LIKE '%ウインドウズ%'
OR tbl.keyword9 LIKE '%ウインドウズ%'
OR tbl.keyword10 LIKE '%ウインドウズ%'
OR tbl.keyword11 LIKE '%ウインドウズ%'
OR tbl.keyword12 LIKE '%ウインドウズ%'
OR tbl.keyword13 LIKE '%ウインドウズ%'
OR tbl.keyword14 LIKE '%ウインドウズ%'
OR tbl.keyword15 LIKE '%ウインドウズ%'
OR tbl.keyword16 LIKE '%ウインドウズ%'
OR tbl.keyword17 LIKE '%ウインドウズ%'
OR tbl.keyword18 LIKE '%ウインドウズ%'
) OR (
tbl.keyword1 LIKE '%ウィンドウズ%'
OR tbl.keyword2 LIKE '%ウィンドウズ%'
OR tbl.keyword3 LIKE '%ウィンドウズ%'
OR tbl.keyword4 LIKE '%ウィンドウズ%'
OR tbl.keyword5 LIKE '%ウィンドウズ%'
OR tbl.keyword6 LIKE '%ウィンドウズ%'
OR tbl.keyword7 LIKE '%ウィンドウズ%'
OR tbl.keyword8 LIKE '%ウィンドウズ%'
OR tbl.keyword9 LIKE '%ウィンドウズ%'
OR tbl.keyword10 LIKE '%ウィンドウズ%'
OR tbl.keyword11 LIKE '%ウィンドウズ%'
OR tbl.keyword12 LIKE '%ウィンドウズ%'
OR tbl.keyword13 LIKE '%ウィンドウズ%'
OR tbl.keyword14 LIKE '%ウィンドウズ%'
OR tbl.keyword15 LIKE '%ウィンドウズ%'
OR tbl.keyword16 LIKE '%ウィンドウズ%'
OR tbl.keyword17 LIKE '%ウィンドウズ%'
OR tbl.keyword18 LIKE '%ウィンドウズ%'
) )
○EXPLAINの実行結果
Aggregate (cost=12393.85..12393.85 rows=1 width=0)
-> Seq Scan on tbl (cost=0.00..12393.85 rows=1 width=0)
○SQLの応答が帰ってくるまでの時間
平均 4.5 秒
==レコード取得==
SELECT id FROM tbl
WHERE
( (
tbl.keyword1 ILIKE '%windows%'
OR tbl.keyword2 ILIKE '%windows%'
OR tbl.keyword3 ILIKE '%windows%'
OR tbl.keyword4 ILIKE '%windows%'
OR tbl.keyword5 ILIKE '%windows%'
OR tbl.keyword6 ILIKE '%windows%'
OR tbl.keyword7 ILIKE '%windows%'
OR tbl.keyword8 ILIKE '%windows%'
OR tbl.keyword9 ILIKE '%windows%'
OR tbl.keyword10 ILIKE '%windows%'
OR tbl.keyword11 ILIKE '%windows%'
OR tbl.keyword12 ILIKE '%windows%'
OR tbl.keyword13 ILIKE '%windows%'
OR tbl.keyword14 ILIKE '%windows%'
OR tbl.keyword15 ILIKE '%windows%'
OR tbl.keyword16 ILIKE '%windows%'
OR tbl.keyword17 ILIKE '%windows%'
OR tbl.keyword18 ILIKE '%windows%'
) OR (
tbl.keyword1 LIKE '%ウインドウズ%'
OR tbl.keyword2 LIKE '%ウインドウズ%'
OR tbl.keyword3 LIKE '%ウインドウズ%'
OR tbl.keyword4 LIKE '%ウインドウズ%'
OR tbl.keyword5 LIKE '%ウインドウズ%'
OR tbl.keyword6 LIKE '%ウインドウズ%'
OR tbl.keyword7 LIKE '%ウインドウズ%'
OR tbl.keyword8 LIKE '%ウインドウズ%'
OR tbl.keyword9 LIKE '%ウインドウズ%'
OR tbl.keyword10 LIKE '%ウインドウズ%'
OR tbl.keyword11 LIKE '%ウインドウズ%'
OR tbl.keyword12 LIKE '%ウインドウズ%'
OR tbl.keyword13 LIKE '%ウインドウズ%'
OR tbl.keyword14 LIKE '%ウインドウズ%'
OR tbl.keyword15 LIKE '%ウインドウズ%'
OR tbl.keyword16 LIKE '%ウインドウズ%'
OR tbl.keyword17 LIKE '%ウインドウズ%'
OR tbl.keyword18 LIKE '%ウインドウズ%'
) OR (
tbl.keyword1 LIKE '%ウィンドウズ%'
OR tbl.keyword2 LIKE '%ウィンドウズ%'
OR tbl.keyword3 LIKE '%ウィンドウズ%'
OR tbl.keyword4 LIKE '%ウィンドウズ%'
OR tbl.keyword5 LIKE '%ウィンドウズ%'
OR tbl.keyword6 LIKE '%ウィンドウズ%'
OR tbl.keyword7 LIKE '%ウィンドウズ%'
OR tbl.keyword8 LIKE '%ウィンドウズ%'
OR tbl.keyword9 LIKE '%ウィンドウズ%'
OR tbl.keyword10 LIKE '%ウィンドウズ%'
OR tbl.keyword11 LIKE '%ウィンドウズ%'
OR tbl.keyword12 LIKE '%ウィンドウズ%'
OR tbl.keyword13 LIKE '%ウィンドウズ%'
OR tbl.keyword14 LIKE '%ウィンドウズ%'
OR tbl.keyword15 LIKE '%ウィンドウズ%'
OR tbl.keyword16 LIKE '%ウィンドウズ%'
OR tbl.keyword17 LIKE '%ウィンドウズ%'
OR tbl.keyword18 LIKE '%ウィンドウズ%'
) )
ORDER BY id ASC
○EXPLAINの実行結果
Seq Scan on tbl (cost=0.00..12393.85 rows=1 width=62)
○SQLの応答が帰ってくるまでの時間
平均 5.5 秒
=============================================
Hashimoto, Masaru <<hashimoto-m @ comtecc.net>>
Comtec Consulting. Inc.
Tel.03-3598-8730 Fax.03-3598-8731
http://www.comtecc.net
=============================================
pgsql-jp メーリングリストの案内