プランの適用について

USE PLAN クエリ ヒントを使用すると、クエリ オプティマイザがクエリに対して指定のクエリ プランを強制的に適用するように設定できます。USE PLAN クエリ ヒントは、引数として XML 形式のクエリ プランを受け取ることによって機能します。USE PLAN は、実行時間の長いプランを使用するクエリに、より優れたプランが存在することがわかっている場合に使用できます。一般的なシナリオには、以前のバージョンの SQL Server では十分なパフォーマンスでクエリが実行されても、アップグレード後のバージョンでは十分に実行されない場合があります。これは Service Pack によるアップグレードでも、完全なバージョン アップグレードでも同じです。ほとんどの場合、アップグレードにより大部分のクエリの実行時間は前バージョンと同等以上のパフォーマンスが得られますが、例外もあります。以前の製品バージョンのクエリ オプティマイザで選択されたクエリ プランの方がアップグレード後に選択されたプランよりも適切な場合は、以前のバージョンのプランを適用するために USE PLAN クエリ ヒントを使用できます。

配置済みのアプリケーションのクエリ パフォーマンスが低い場合のトラブルシューティングを行うときに、USE PLAN クエリ ヒントとプラン ガイドを併用できます。プラン ガイドは、アプリケーションを直接変更できないときに、クエリ ヒントをクエリに適用するために使用されます。プラン ガイドの詳細については、「プラン ガイドを使用した配置済みアプリケーションのクエリの最適化」を参照してください。プラン ガイドでの USE PLAN クエリ ヒントの適用方法を示す詳細なシナリオについては、「プラン適用シナリオ : クエリ プランを指定するプラン ガイドの作成」および「プラン適用シナリオ : 書き直されたクエリから取得したプランを適用するためのプラン ガイドの作成」を参照してください。

プランの適用は、ほとんどの種類のクエリで使用できます。たとえば、テーブル、クラスタ化インデックスや非クラスタ化インデックス、インデックス付きビュー、パーティション テーブルやパーティション インデックスなどに対するクエリがあります。USE PLAN は、データ操作言語 (DML) ステートメントの INSERT、UPDATE、MERGE、または DELETE で指定できます。インデックスの追加や削除を行うなどしてデータベース スキーマを変更すると、USE PLAN ヒントで指定したプランが無効になることがあります。USE PLAN をクエリで直接指定すると、無効なプランが原因でクエリが失敗します。USE PLAN をプラン ガイドで指定した場合は、無効なプランが原因でクエリが失敗することはありませんが、ヒントを使用せずにプランがコンパイルされるので、最適な選択とならない場合があります。USE PLAN ヒントをプラン ガイド内部で使用する場合は、sys.fn_validate_plan_guide 関数を使用してプランの有効性を検証できます。この関数の結果に基づいて、そのプラン ガイドを削除してクエリを再チューニングするか、データベースのデザインを変更するかを決定できます。たとえば、プラン ガイドで指定されているインデックスを再作成することができます。

USE PLAN クエリ ヒントを使用して生成されたクエリ プランは、他のクエリ プランと同様にキャッシュされます。

プランの適用の制限事項

プランの適用は、1 つの静的実行プランに対するクエリに制限されます。プランの適用により、データ サイズやディストリビューションの変更、新しいインデックス、他の変数を選択するクエリ オプティマイザの機能が削除されます。したがって、プランの適用の使い方を誤ると、パフォーマンスの問題が生じることがあります。新しい正確な統計情報の使用、最適化されたインデックスなど、クエリのパフォーマンスを向上させるその他のオプションをすべて調査した場合に限って、プランの適用を使用する必要があります。パフォーマンスの問題点、データベースとアプリケーションの環境の変更に詳しい、熟練したデータベース管理者や開発者だけが、プランの適用を使用することをお勧めします。

配置済みのアプリケーションのクエリのコンパイルに影響する USE PLAN クエリ ヒントを使用しているときは、クエリ ヒントをアプリケーションに直接埋め込むのではなく、プラン ガイドの内部で使用する必要があります。これを行うことにより、次の問題点に対処することができます。

  • アプリケーションを変更したり再コンパイルしないで、ヒントを変更または削除できます。限られた状況では、あるバージョンの SQL Server に適用された USE PLAN ヒントが、今後の Service Pack またはバージョン リリースには適用できないこともあります。そのため、アプリケーションを配置した後に、USE PLAN ヒントの変更または削除が必要になる場合があります。

  • 大きなヒントをクエリに直接使用することを避けることができます。これにより、クエリが読み取りやすくなります。

    重要な注意事項重要

    USE PLAN を使用するプラン ガイドを作成するときは、プランを適用するクエリが、通常はカーソル要求と共に送信されるかどうかをテスト時に確認する必要があります。カーソルベースのクエリのクエリ プランと、カーソルを使用しないクエリのクエリ プランは異なります。したがって、カーソル要求と共に送信されるクエリに適用する USE PLAN ヒントを指定するプラン ガイドを作成するには、プラン ガイドでカーソル プランを指定する必要があります。詳細については、「カーソルを使用したクエリでの USE PLAN クエリ ヒントの使用」を参照してください。

次の種類のクエリでは、プランの適用はサポートされません。