4

SQL Server 2012 を使用しています。テーブルにはテキスト列と日付列があります。テキスト列にはフルテキスト インデックスがあります。クエリはフルテキスト列に対して CONTAINS を発行しますが、日付列に大なり条件も含める必要があります。B ツリーとフルテキスト インデックスからの結果をマージする SQL Server のパフォーマンスが心配です。

Oracle では、このシナリオのパフォーマンス面は、「通常の」列 (全文検索の対象ではない) を全文索引 (CTXCAT) に含めることで対処されるため、次のような全文索引を設定できます。それ:

ctx_ddl.create_index_set('auction_set');
ctx_ddl.add_index       ('auction_set', 'start_date');

そして、そのようにクエリします:

WHERE CATSEARCH (item_desc, '(toy dog) | "live animal"', 'start_date > ###') > 0

SQL Server で B ツリー インデックスをフルテキスト インデックスに結合することは可能ですか?

SQL Server での混合 (フルテキストと B ツリー) クエリのシナリオに対処する最もパフォーマンスの高い方法は何ですか?

ありがとう。

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、あなたが問題を経験することはないと思います。フルテキストと B ツリーを組み合わせて素晴らしい結果を得ることがよくあります。全文検索が実行されると、1 つの用語のみを含むインデックス付きの列と同じように、区切られた各「用語」がインデックスとして検索されます (いくつかの SQL 統計を取得または取得します)。いずれにせよ、SQL はその実行パスを把握する必要があります。全文検索では、整数値/日付値の比較は優先されません。区切りデータの文字列の照合には特に適しています。

B ツリーの概念の効率性を有利に利用し続けたいと思うと思います。全文カタログ インデックス検索は、文字列を解析/比較するために "LIKE" を使用する状況でははるかに有利ですが、はるかに回りくどい検索のように見えます。

私がすることは:

 SELECT * FROM MyTable
  WHERE CONTAINS(columnName, '"Toy Dog" OR "live animal"')
    AND start_date > ###;

(構文情報については、この msdn の記事を参照してください)

PS 整数データのフルテキスト インデックスを作成する場合は、カタログのインデックス作成でこれらの値が無視されないように、ストップリストをオフにします。

それが役立つことを願っています!(誰も答えていないので、私の経験を述べようと思いました)

于 2012-11-27T20:24:32.317 に答える