新しいプラン ガイドの作成

SQL Server 2012 では、SQL Server Management Studio または Transact-SQL を使用してプラン ガイドを作成できます。 プラン ガイドは、クエリ ヒントまたは固定クエリ プランをクエリにアタッチすることにより、クエリの最適化を促します。 プラン ガイドでは、最適化する Transact-SQL ステートメントと、使用するクエリ ヒントを含む OPTION 句またはクエリの最適化に使用する特定のクエリ プランのいずれかを指定します。 クエリが実行されると、クエリ オプティマイザーにより Transact-SQL ステートメントがプラン ガイドと照合され、実行時にクエリに OPTION 句がアタッチされるか、指定されたクエリ プランが使用されます。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    セキュリティ

  • 以下を使用してプラン ガイドを作成するには:

    SQL Server Management Studio

    Transact-SQL

作業を開始する準備

制限事項と制約事項

  • sp_create_plan_guide の引数は、表示される順序で指定する必要があります。 sp_create_plan_guide のパラメーターに値を指定する場合、パラメーター名はすべて明示的に指定するか、すべて指定しないかのいずれかにする必要があります。 たとえば、@name = を指定する場合は、@stmt =、@type = なども指定する必要があります。 同様に、@name = を省略してパラメーター値だけを指定する場合は、その他のパラメーター名も省略し、値だけを指定する必要があります。 引数の名前は、構文を理解しやすくするための説明目的のものです。 SQL Server では、指定したパラメーター名と、その名前が使用されている位置にあるパラメーターの名前が一致しているかどうかは確認されません。

  • 同一のクエリとバッチまたはモジュールに対し、複数の OBJECT または SQL プラン ガイドを作成できます。 ただし、有効にできるプラン ガイドは常に 1 つだけです。

  • @module\_or\_batch 値で参照するストアド プロシージャ、関数、または DML トリガーが、WITH ENCRYPTION 句を指定するものであるか一時的なものである場合、この値に対して OBJECT 型のプラン ガイドは作成できません。

  • プラン ガイドで参照される関数、ストアド プロシージャ、または DML トリガーを削除または変更しようとすると、有効かどうかにかかわらず、エラーが発生します。 プラン ガイドで参照され、トリガーが定義されているテーブルを削除しようとする場合もエラーが発生します。

セキュリティ

権限

OBJECT 型のプラン ガイドを作成するには、参照先オブジェクトに対する ALTER 権限が必要です。 SQL または TEMPLATE タイプのプラン ガイドを作成するには、現在のデータベースに対する ALTER 権限が必要です。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

SQL Server Management Studio の使用

プラン ガイドを作成するには

  1. プラス記号をクリックして、作成するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。

  2. [プラン ガイド] フォルダーを右クリックし、[新しいプラン ガイド] をクリックします。

  3. [新しいプラン ガイド] ダイアログ ボックスの [名前] ボックスに、プラン ガイドの名前を入力します。

  4. [ステートメント] ボックスに、プラン ガイドの適用対象の Transact-SQL ステートメントを入力します。

  5. [スコープの種類] ボックスの一覧で、Transact-SQL ステートメントが存在するエンティティの種類を選択します。 これは Transact-SQL ステートメントとプラン ガイドを照合するコンテキストを示します。 選択できる値は、OBJECTSQL、および TEMPLATE です。

  6. [スコープのバッチ] ボックスに、Transact-SQL ステートメントを含むバッチ テキストを入力します。 バッチ テキストには、USE database ステートメントを含めることはできません。 [スコープのバッチ] ボックスは、スコープの種類として [SQL] を選択した場合にのみ利用できます。 スコープの種類が SQL であるとき、[スコープのバッチ] ボックスに何も入力しなかった場合、バッチ テキストの値は、[ステートメント] ボックスと同じ値に設定されます。

  7. [スコープのスキーマ名] ボックスに、対象のオブジェクトを含んでいるスキーマの名前を入力します。 [スコープのスキーマ名] ボックスは、スコープの種類として [オブジェクト] を選択した場合にのみ利用できます。

  8. [スコープのオブジェクト名] ボックスに、Transact-SQL ステートメントを含む Transact-SQL ストアド プロシージャ、ユーザー定義スカラー関数、複数ステートメントのテーブル値関数、または DML トリガーの名前を入力します。 [スコープのオブジェクト名] ボックスは、スコープの種類として [オブジェクト] を選択した場合にのみ利用できます。

  9. Transact-SQL ステートメントに埋め込まれているすべてのパラメーターの名前とデータ型を [パラメーター] ボックスに入力します。

    パラメーターは、次の条件のいずれかを満たす場合にのみ適用されます。

    • スコープの種類が SQL または TEMPLATE の場合。 TEMPLATE の場合、パラメーターを NULL にすることはできません。

    • Transact-SQL ステートメントが sp_executesql を使用して送信され、パラメーターの値が指定されている場合、または SQL Server が内部でステートメントをパラメーター化した後に送信する場合。

  10. Transact-SQL ステートメントに適用されるクエリ ヒントまたはクエリ プランを [ヒント] ボックスに入力します。 1 つまたは複数のクエリ ヒントを指定するには、有効な OPTION 句を入力します。

  11. [OK] をクリックします。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

Transact-SQL の使用

プラン ガイドを作成するには

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします

    -- creates a plan guide named Guide1 based on a SQL statement
    EXEC sp_create_plan_guide 
        @name = N'Guide1', 
        @stmt = N'SELECT TOP 1 * 
                  FROM Sales.SalesOrderHeader 
                  ORDER BY OrderDate DESC', 
        @type = N'SQL',
        @module_or_batch = NULL, 
        @params = NULL, 
        @hints = N'OPTION (MAXDOP 1)';
    

詳細については、「sp_create_plan_guide (Transact-SQL)」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]