プランの適用について

更新 : 2007 年 9 月 15 日

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

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

プランの適用は、ほとんどの種類の SELECT クエリで使用できます。たとえば、テーブル、クラスタ化インデックスや非クラスタ化インデックス、インデックス付きビュー、パーティション テーブルやパーティション インデックスなどに対するクエリがあります。USE PLAN は、INSERT、UPDATE、または DELETE の各ステートメントに指定することはできません。

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

プランの適用の制限事項

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

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

  • アプリケーションを変更したり再コンパイルしないで、ヒントを変更または削除できます。限られた状況では、あるバージョンの SQL Server に適用された USE PLAN ヒントが、今後の Service Pack またはバージョン リリースには適用できないこともあります。そのため、アプリケーションを配置した後に、USE PLAN ヒントの変更または削除が必要になる場合があります。
  • 大きなヒントをクエリに直接使用することを避けることができます。これにより、クエリが読み取りやすくなります。
    ms186343.note(ja-jp,SQL.90).gif重要 :
    USE PLAN を使用するプラン ガイドを作成するときは、プランを適用するクエリが、通常はカーソル要求と共に送信されるかどうかをテスト時に確認する必要があります。カーソルベースのクエリのクエリ プランと、カーソルを使用しないクエリのクエリ プランは異なります。したがって、カーソル要求と共に送信されるクエリに適用する USE PLAN ヒントを指定するプラン ガイドを作成するには、プラン ガイドでカーソル プランを指定する必要があります。詳細については、「カーソルを使用したクエリでの USE PLAN クエリ ヒントの使用」を参照してください。

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

  • 動的な、キーセット ドリブン カーソルおよび順方向専用カーソルを含むクエリ。静的な高速順方向専用カーソルはサポートされます。詳細については、「カーソルを使用したクエリでの USE PLAN クエリ ヒントの使用」を参照してください。
  • 分散クエリ。
  • フルテキスト クエリ。
  • INSERT ステートメント、DELETE ステートメント、および UPDATE ステートメント。

参照

概念

プラン強制の使用によるクエリ プランの指定

その他の技術情報

クエリ パフォーマンス

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2007 年 9 月 15 日

変更内容 :
  • 結果の文字列リテラルが 8 KB よりも長い場合、USE PLAN で生成されたクエリ プランはキャッシュされないという誤った記述を修正しました。