適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
以下の推奨事項リストは、全文クエリのパフォーマンス向上に役立ちます。
メモリ、ディスク速度、CPU速度、機械アーキテクチャなどのハードウェアリソースは、全文クエリのパフォーマンスに影響を与えることがあります。
ALTER INDEX REORGANIZE を使用して、ベーステーブルのインデックスをデフラグします。
REORGANIZE を使用してフルテキスト カタログを再構成します。 全文インデックス断片が多すぎると、クエリ性能の大幅な低下を招く可能性があります。 この文はすべての断片をインデックスごとに1つの大きな断片に統合し、古い発生情報をすべて除去します。 パフォーマンステストの前に必ずこの文を実行してください。この文を実行すると、そのカタログ内の全文インデックスがマスターマージされるからです。
フルテキスト キー列として選択する列は、小さい列に制限します。 900バイトの列をサポートしていますが、全文インデックスではより小さいキー列を使いましょう。 int および bigint を使用すると、最適なパフォーマンスが得られます。
整数の全文キーを使うことで 、docid マッピングテーブルとの結合を避け、クエリやクロールの性能が向上します。 全文キーがクラスタ化されたインデックスキーでもある場合、さらなる性能向上が可能です。
複数の CONTAINS 述語を1つの
CONTAINS述語に結合します。 SQL Serverでは、CONTAINSクエリの列リストを指定することができます。結果を制限し性能を向上させるために、関数と
FREETEXTTABLE関数のCONTAINSTABLEパラメータを使用します。 top_n_by_rank を使用すると、最も関連性の高いヒットだけを呼び出すことができます。 ビジネス シナリオですべてのヒットを呼び出す必要がない場合 (つまり、 総呼び出しが不要な場合) にのみ、このパラメーターを使用してください。注
トータルリコールは通常、法的シナリオでは必要ですが、eビジネスのようなビジネスシナリオではパフォーマンスの方が重要でない場合もあります。
フルテキスト クエリ プランをチェックして、適切な結合プランが選択されていることを確認します。 必要であれば結合ヒントやクエリ ヒントを使用します。 フルテキスト クエリでパラメーターが使用されている場合は、パラメーターの初回の値によってクエリ プランが決定されます。
OPTIMIZE FORquery hintを使って、クエリを要求する値で強制的にコンパイルさせることができます。 これにより、決定的なクエリ プランを実現してパフォーマンスを強化できます。全文検索では、
CONTAINSTABLE (AND, OR)で指定された論理演算子は Transact-SQL 結合として実装するか、全文実行のストリーミングテーブル値関数(STVF)内で実装できます。 通常、論理演算子が1種類のみのクエリは純粋に全文実行で実装されますが、論理演算子を混在したクエリはSQL結合も含まれます。 フルテキスト実行 STVF 内部に論理演算子を実装すると、複数の特別なインデックス プロパティが使用され、SQL 結合よりはるかに高速になります。 このため、可能な限り単一の論理演算子のみで問い合わせを構えましょう。選択的リレーショナル述語を含むアプリケーションでは、選択的リレーショナル述語と非選択的な全文述語を使うクエリは、クエリ最適化器を用いて書くと最も良いパフォーマンスを発揮することがあります。 このアプローチにより、クエリオプティマイザは述語や範囲プッシュダウンを活用して効果的なクエリ計画を作成できるかどうかを判断できます。 この方法は、リレーショナル データをフルテキスト データとしてインデックス作成するよりも単純であり、多くの場合、効率的でもあります。
関連リソース
SQL Server 2008 フルテキスト検索: 内部構造と機能強化