フルテキスト インデックスと varchar 列の通常のインデックスの違い (および利点/欠点) は正確には何ですか? いつどのインデックスを使用しますか?
最もパフォーマンスの高い方法で検索できるようにする必要がある多数の varchar 列 (住所 - 都市名、通り名など) があり、使用するインデックスの種類とその理由を理解しようとしています。
ありがとうございました!
フルテキスト インデックスと varchar 列の通常のインデックスの違い (および利点/欠点) は正確には何ですか? いつどのインデックスを使用しますか?
最もパフォーマンスの高い方法で検索できるようにする必要がある多数の varchar 列 (住所 - 都市名、通り名など) があり、使用するインデックスの種類とその理由を理解しようとしています。
ありがとうございました!
実行する検索の種類によって異なります。たとえば、次のクエリでは通常のインデックスを使用できません。
SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%'
sargableではありません。これは sargable ですが、選択性はあまり良くないかもしれません:
SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + '%'
フルテキスト インデックスの使用方法は、次のようにまったく異なります。
SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText)
MSDNから:
フルテキスト検索とは対照的に、LIKE Transact-SQL 述語は文字パターンに対してのみ機能します。また、LIKE 述語を使用して、フォーマットされたバイナリ データをクエリすることはできません。さらに、大量の非構造化テキスト データに対する LIKE クエリは、同じデータに対する同等のフルテキスト クエリよりもはるかに遅くなります。
数百万行のテキスト データに対する LIKE クエリは、返されるまでに数分かかる場合があります。一方、フルテキスト クエリは、返される行数にもよりますが、同じデータに対して数秒以下しかかかりません。