プラン ガイドへのクエリ ヒントのアタッチAttach Query Hints to a Plan Guide

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

クエリ ヒントは、有効なものであれば、任意の組み合わせでプラン ガイドに使用できます。Any combination of valid query hints can be used in a plan guide. プラン ガイドをクエリと照合する際、コンパイルや最適化が行われる前に、そのプラン ガイドのヒント句で指定されている OPTION 句がクエリに追加されます。When a plan guide matches a query, the OPTION clause specified in the hints clause of a plan guide is added to the query before it compiles and optimizes. プラン ガイドと照合するクエリで既に OPTION 句が使用されている場合、クエリ内のクエリ ヒントがプラン ガイドで指定されているクエリ ヒントに置換されます。If a query that is matched to a plan guide already has an OPTION clause, the query hints specified in the plan guide replace those in the query. ただし、既に OPTION 句が使用されているクエリと照合するプラン ガイドでは、sp_create_plan_guide ステートメントで照合するクエリのテキストを指定するときに、そのクエリの OPTION 句を含める必要があります。However, for a plan guide to match a query that already has an OPTION clause, you must include the OPTION clause of the query when you specify the text of the query to match in the sp_create_plan_guide statement. プラン ガイドで指定されたヒントを、クエリの既存のヒントに代わりに使用するのではなく、既存のヒントに追加する場合は、既存のヒントと追加するヒントの両方をプラン ガイドの OPTION 句で指定する必要があります。If you want the hints specified in the plan guide to be added to the hints that already exist on the query, instead of replacing them, you must specify both the original hints and the additional hints in the OPTION clause of the plan guide.

注意事項

クエリ ヒントの使用方法が正しくないプラン ガイドは、コンパイル、実行、またはパフォーマンスに関する問題の原因になることがあります。Plan guides that misuse query hints can cause compilation, execution, or performance problems. プラン ガイドは、上級開発者とデータベース管理者のみが使用するようにしてください。Plan guides should be used only by experienced developers and database administrators.

プラン ガイドで使用される一般的なクエリ ヒントCommon Query Hints Used in Plan Guides

通常、プラン ガイドからメリットを得られる可能性があるクエリは、パラメーター ベースのものです。このようなクエリはキャッシュされたクエリ プランを使用しますが、最悪のシナリオや最も典型的なシナリオにパラメーター値が対応していないために、クエリのパフォーマンスが低くなることがあります。Queries that can benefit from plan guides are generally parameter-based, and may be performing poorly because they use cached query plans whose parameter values do not represent a worst-case or most representative scenario. この問題に対処するのに、OPTIMIZE FOR クエリ ヒントと RECOMPILE クエリ ヒントを使用できます。The OPTIMIZE FOR and RECOMPILE query hints can be used to address this problem. OPTIMIZE FOR は、クエリの最適化時にパラメーターに特定の値を使用するように SQL ServerSQL Server に指示するクエリ ヒントです。OPTIMIZE FOR instructs SQL ServerSQL Server to use a particular value for a parameter when the query is optimized. RECOMPILE は、クエリ プランを実行後に破棄し、次に同じクエリが実行されるときに、クエリ オプティマイザーにより新しいクエリ プランに強制的に再コンパイルされるようにサーバーに指示するクエリ ヒントです。RECOMPILE instructs the server to discard a query plan after execution, forcing the query optimizer to recompile a new query plan the next time that the same query is executed. 例については、「 プラン ガイド」を参照してください。For an example, see Plan Guides.

また、INDEX、FORCESCAN、および FORCESEEK のテーブル ヒントをクエリ ヒントとして指定できます。In addition, you can specify the table hints INDEX, FORCESCAN, and FORCESEEK as query hints. クエリ ヒントとして指定すると、これらのヒントはインライン テーブルまたはビュー ヒントと同じように動作します。When specified as query hints, these hints behave like an inline table or view hint. INDEX ヒントは、指定したインデックスのみを使用して、参照されているテーブルやビューのデータにアクセスするよう、クエリ オプティマイザーに指示します。The INDEX hint forces the query optimizer to use only the specified indexes to access the data in the referenced table or view. FORCESEEK ヒントは、インデックスのシーク操作のみを使用して参照先テーブルやビューのデータにアクセスするよう、オプティマイザーに指示します。The FORCESEEK hint forces the optimizer to use only an index seek operation to access the data in the referenced table or view. これらのヒントによってプラン ガイド機能が拡張され、プラン ガイドを使用するクエリをさらに最適化することができます。These hints provide additional plan guide functionality and allow you to have more influence over the optimization of queries that use the plan guide.