2

4,000万件のレコードを含むテーブルを持つSQLServer2005データベースがあります。各レコードには、コンマで区切られたキーワードのリストを格納する列が含まれています。各キーワードは文字と数字の組み合わせです。キーワードの長さは最大7文字で、レコードごとに平均15個のキーワードがあります。キーワードは行全体で一意ではありません。

キーワードの全部または一部を検索したい。

328,245,708の一意のキー数を示すフルテキストインデックスを作成しました。検索効率は、4文字以上(テストマシンでは約100ms )のクエリでは問題ありませんが、3文字以下(テストマシンでは最大3秒)のクエリでは遅すぎます。

CONTAINSTABLE私は両方と、同様の結果をもたらすCONTAINSある種のクエリを試してきました。'[query]*'

短い単語が異なるレコード間でより頻繁に繰り返されるため、短いクエリのパフォーマンスは遅くなると思います。

TOP X結果の並べ替えは重要ではありません。ランクで並べ替えた結果を返すようにしていCONTAINSTABLEます。これでは、目的のパフォーマンスが得られません。

短いクエリでこの検索を高速化するにはどうすればよいですか?

4

2 に答える 2

3

もう1つのオプションは、テーブル構造を正規化して、データレコードを1つのテーブルに、タグを別のテーブルに、タグをデータレコードに関連付けるための連想テーブルを作成することを検討することです。これにより、タグに対してテキスト検索を実行し、連想テーブルに結合するだけで、関連するレコードを取得できます。

于 2012-11-06T14:58:45.997 に答える
1

SOLRSphinxなどにゲートウェイして、専用のテキスト検索エンジンに検索機能を処理させることもできます。

于 2012-11-06T14:55:08.417 に答える