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

Hashimoto, Masaru hashimoto-m @ comtecc.net
2002年 7月 16日 (火) 22:40:42 JST


いつもお世話になってます。
橋本と申します。

現在、以下の条件でWEB系システムのキーワード検索機能を作成しています。

・件数は約35,000件
・大文字小文字の区別なし
・全項目の部分一致(項目数は18個)

全てのキーワードをILike で部分一致させる必要があるため、
検索がかなり遅くなってしまっています。
(初めは10,000件ヒットした場合で約25秒かかってました)

いろいろと試行錯誤を繰り返した結果、なんとか5秒くらいで
検索できるようにはなったのですが、
DBに負荷をかけた状態で検索すると10秒近くになってしまいます。
また、日本語のキーワードがあると遅いようです。

皆様はこのような検索のとき、どのような方法を
使用しているのでしょうか?

==改善した内容==
1.検索用のテーブルを作成した
 (全てのキーワード項目がひとつのテーブルに)
2.ヒットしたレコードを全件取得してSession変数に入れていたのを
 LimitとOffsetで一覧に表示するレコードのみ取得した。
3.PostgresのSortメモリーと共有メモリーの値を調整した。

2をしたことにより、件数が多い場合は早くなりました。
ただ、Limitでレコード数を限定しているので、総件数を取得するために
同じ条件でCountを実行しています。
このCountが実際の情報を取得するSQLと同じくらいかかっているので
ボトルネックになっているのかもしれません。

もし、他にいい方法がございましたらご教授願えますでしょうか。
よろしくお願いします。







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