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