実際の実行計画の「クエリ コスト」を監視するいくつかのテストを実行しました。
「AND」で検索フレーズに結合された任意の数の単語に対する CONTAINSTABLE の全体的なコストは、それらの単語の中で最も人気のない単語だけのコストに等しいようです。
「OR」で結合された任意の数の単語に対する CONTAINSTABLE の全体的なコストは、それらの単語の中で最も人気のある単語だけのコストに等しくなります。
これは、全文検索エンジンが、インデックス内での人気度 (出現回数) に従って、検索文字列から単語に優先順位を付けていることを示唆しています。したがって、クライアントで検索文字列の単語を事前注文しようとしてもメリットはないと思います。
私の全文検索テストは次のとおりです。
Declare @Word1 nvarchar(50) = N'"Word1*"';
Declare @Word2 nvarchar(50) = N'"Word2*"';
Declare @SearchString nvarchar(100) = '';
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' Start';
Set @SearchString = @Word1;
Select * From CONTAINSTABLE([Table], [Field], @SearchString);
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' ' + @SearchString;
Set @SearchString = @Word2;
Select * From CONTAINSTABLE([Table], [Field], @SearchString);
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' ' + @SearchString;
Set @SearchString = @Word1 + ' AND ' + @Word2;
Select * From CONTAINSTABLE([Table], [Field], @SearchString);
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' ' + @SearchString;
Set @SearchString = @Word2 + ' AND ' + @Word1;
Select * From CONTAINSTABLE([Table], [Field], @SearchString);
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' ' + @SearchString;
Set @SearchString = @Word1 + ' OR ' + @Word2;
Select * From CONTAINSTABLE([Table], [Field], @SearchString);
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' ' + @SearchString;
Set @SearchString = @Word2 + ' OR ' + @Word1;
Select * From CONTAINSTABLE([Table], [Field], @SearchString);
PRINT SUBSTRING(CONVERT(varchar, SYSDATETIME(), 121), 12, 11) + ' ' + @SearchString;
[Table], [Field]
実際のフルテキスト インデックス テーブル名とフィールド名に置き換え、 @Word1
and@Word2
をデータ セットの一般的な単語や後方単語に設定してください。