[pgsql-jp: 26713] Re: Likeの部分一致で検索

ISHIDA Akio iakio @ pjam.jpweb.net
2002年 7月 17日 (水) 14:16:39 JST


石田@苫小牧市です。

On Wed, Jul 17, 2002 at 12:21:28PM +0900, Hashimoto, Masaru wrote:
> 橋本です。
> 新井様、返信ありがとうございます。
> 
> > どこかpostgresは他のDBよりクエリが遅くなりやすい印象があります。
> > 頻繁にvacuumやvacuum fullを行っていますか?
> > これをやらないと、すぐに遅くなってしまうようです。
> > 
> vacuumは、毎日深夜にスケジュールで起動実行させています。
> 大量のデータ更新は一日一回しかやらないので問題ないかなと。
> また、vacuum fullについては、データのロックがかかってしまうので
> 頻繁には行っていません。
> ただ、現在はテスト的にvacuum fullを毎日かけています。
> (vacuumの代わりにvacuum fullをしています)
> 
> > 実際のSQL文と、explain analyzeの結果はどうなっていますか?
> > 
> 長くなってしまいましたが、以下に実際のSQL文を記述します。
> 
> ・キーワードは[windows][ウィンドウズ][ウインドウズ]です。
> ・すべてORで検索しています。
> ・キーワードにひとつでもアルファベットがあったらILIKEにしています。
> ・このテーブルにインデックスは張っていません。
> ・ちなみに、キーワードを[windows]だけにしてみると、
>  カウントとレコード取得であわせて5秒くらいで帰ってきます。

キーワードがこの 3 つだけであるのなら、
 (あるいは幾つか限定されているのなら)
tbl に `` キーワードがあるかどうか '' の状態を持つフィールド
(たとえば haskeyword) を 1 つ追加してやって、
データ更新時にキーワードの有無をしらべて、haskeyword を更新する。
トリガを使うのも良いと思います。
検索時は、直接 keyword1 などを見ずに、その haskeyword を見る。とか。


あるいは、``どのキーワードがどのレコードに含まれている'' を表す、
キーワードテーブルを別にもうけるというアプローチもあります。

-- 
ISHIDA Akio




pgsql-jp メーリングリストの案内