[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 メーリングリストの案内