新しいプラン ガイドの作成Create a New 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

プラン ガイドは、クエリ ヒントまたは固定クエリ プランをクエリにアタッチすることにより、クエリの最適化を促します。Plan guides influence query optimization by attaching query hints or a fixed query plan to them. プラン ガイドでは、最適化するステートメントと、使用するクエリ ヒントを含む OPTION 句In the plan guide, you specify the statement that you want optimized, and either an OPTION clause that contains query hints you want to use. またはクエリの最適化に使用する特定のクエリ プランのいずれかを指定します。or a specific query plan you want to use to optimize the query. クエリが実行されると、クエリ オプティマイザーにより Transact-SQLTransact-SQL ステートメントがプラン ガイドと照合され、実行時にクエリに OPTION 句がアタッチされるか、指定されたクエリ プランが使用されます。When the query executes, the query optimizer matches the Transact-SQLTransact-SQL statement to the plan guide and either attaches the OPTION clause to the query at run time or uses the specified query plan.

プラン ガイドは固定クエリ プランまたはクエリ ヒントをクエリに適用します。A Plan Guide applies either a fixed query plan, and/or query hints, to a query.

制限事項と制約事項Limitations and restrictions

  • sp_create_plan_guide の引数は、表示される順序で指定する必要があります。The arguments to sp_create_plan_guide must be provided in the order that is shown. sp_create_plan_guideのパラメーターに値を指定する場合、パラメーター名はすべて明示的に指定するか、すべて指定しないかのいずれかにする必要があります。When you supply values for the parameters of sp_create_plan_guide, all parameter names must be specified explicitly, or none at all. たとえば、 @name = を指定する場合は、 @stmt =@type = なども指定する必要があります。For example, if @name = is specified, then @stmt = , @type =, and so on, must also be specified. 同様に、 @name = を省略してパラメーター値だけを指定する場合は、その他のパラメーター名も省略し、値だけを指定する必要があります。Likewise, if @name = is omitted and only the parameter value is provided, the remaining parameter names must also be omitted, and only their values provided. 引数の名前は、構文を理解しやすくするための説明目的のものです。Argument names are for descriptive purposes only, to help understand the syntax. SQL ServerSQL Server では、指定したパラメーター名と、その名前が使用されている位置にあるパラメーターの名前が一致しているかどうかは確認されません。does not verify that the specified parameter name matches the name for the parameter in the position where the name is used.

  • 同一のクエリとバッチまたはモジュールに対し、複数の OBJECT または SQL プラン ガイドを作成できます。You can create more than one OBJECT or SQL plan guide for the same query and batch or module. ただし、有効にできるプラン ガイドは常に 1 つだけです。However, only one plan guide can be enabled at any given time.

  • @module_or_batch 値で参照するストアド プロシージャ、関数、または DML トリガーが、WITH ENCRYPTION 句を指定するものであるか一時的なものである場合、この値に対して OBJECT 型のプラン ガイドは作成できません。Plan guides of type OBJECT cannot be created for an @module_or_batch value that references a stored procedure, function, or DML trigger that specifies the WITH ENCRYPTION clause or that is temporary.

  • 有効、無効にする場合のどちらでも、そのプラン ガイドで参照されている関数、ストアド プロシージャ、または DML トリガーを削除または変更しようとすると、エラーが発生します。Trying to drop or modify a function, stored procedure, or DML trigger that is referenced by a plan guide, either enabled or disabled, causes an error. プラン ガイドで参照され、トリガーが定義されているテーブルを削除しようとする場合もエラーが発生します。Trying to drop a table that has a trigger defined on it that is referenced by a plan guide also causes an error.

PermissionsPermissions

OBJECT 型のプラン ガイドを作成するには、参照先オブジェクトに対する ALTER 権限が必要です。To create a plan guide of type OBJECT, you need ALTER permission on the referenced object. SQL または TEMPLATE タイプのプラン ガイドを作成するには、現在のデータベースに対する ALTER 権限が必要です。To create a plan guide of type SQL or TEMPLATE, you need ALTER permission on the current database.

SSMS を使用してプラン ガイドを作成するCreate a plan guide using SSMS

  1. プラス記号をクリックして、作成するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。Click the plus sign to expand the database in which you want to create a plan guide, and then click the plus sign to expand the Programmability folder.

  2. [プラン ガイド] フォルダーを右クリックし、 [新しいプラン ガイド...] をクリックします。 select_plan_guideRight-click the Plan Guides folder and select New Plan Guide.... select_plan_guide

  3. [新しいプラン ガイド] ダイアログ ボックスの [名前] ボックスに、プラン ガイドの名前を入力します。In the New Plan Guide dialog box, in the Name box, enter the name of the plan guide.

  4. [ステートメント] ボックスに、プラン ガイドの適用対象の Transact-SQLTransact-SQL ステートメントを入力します。In the Statement box, enter the Transact-SQLTransact-SQL statement against which the plan guide is to be applied.

  5. [スコープの種類] ボックスの一覧で、 Transact-SQLTransact-SQL ステートメントが存在するエンティティの種類を選択します。In the Scope type list, select the type of entity in which the Transact-SQLTransact-SQL statement appears. これは Transact-SQLTransact-SQL ステートメントとプラン ガイドを照合するコンテキストを示します。This specifies the context for matching the Transact-SQLTransact-SQL statement to the plan guide. 選択できる値は、 OBJECTSQL、および TEMPLATEです。Possible values are OBJECT, SQL, and TEMPLATE.

  6. [スコープのバッチ] ボックスに、 Transact-SQLTransact-SQL ステートメントを含むバッチ テキストを入力します。In the Scope batch box, enter the batch text in which the Transact-SQLTransact-SQL statement appears. バッチ テキストには、USEdatabase ステートメントを含めることはできません。The batch text cannot include a USEdatabase statement. [スコープのバッチ] ボックスは、スコープの種類として [SQL] を選択した場合にのみ利用できます。The Scope batch box is only available when SQL is selected as a scope type. スコープの種類が SQL であるとき、[スコープのバッチ] ボックスに何も入力しなかった場合、バッチ テキストの値は、 [ステートメント] ボックスと同じ値に設定されます。If nothing is entered in the scope batch box when SQL is the scope type, then the value of the batch text is set to the same value as is in the Statement box.

  7. [スコープのスキーマ名] ボックスに、対象のオブジェクトを含んでいるスキーマの名前を入力します。In the Scope schema name list, enter the name of the schema in which the object is contained. [スコープのスキーマ名] ボックスは、スコープの種類として [オブジェクト] を選択した場合にのみ利用できます。The Scope schema name box is only available when Object is selected as a scope type.

  8. [スコープのオブジェクト名] ボックスに、 Transact-SQLTransact-SQL ステートメントを含む Transact-SQLTransact-SQL ストアド プロシージャ、ユーザー定義スカラー関数、複数ステートメントのテーブル値関数、または DML トリガーの名前を入力します。In the Scope object name box, enter the name of the Transact-SQLTransact-SQL stored procedure, user-defined scalar function, multistatement table-valued function, or DML trigger in which the Transact-SQLTransact-SQL statement appears. [スコープのオブジェクト名] ボックスは、スコープの種類として [オブジェクト] を選択した場合にのみ利用できます。The Scope object name box is only available when Object is selected as a scope type.

  9. ステートメントに埋め込まれているすべてのパラメーターの名前とデータ型を [パラメーター] Transact-SQLTransact-SQL ボックスに入力します。In the Parameters box, enter the parameter name and data type of all parameters that are embedded in the Transact-SQLTransact-SQL statement.

    パラメーターは、次の条件のいずれかを満たす場合にのみ適用されます。Parameters apply only when either of the following is true:

    • スコープの種類が SQL または TEMPLATEの場合。The scope type is SQL or TEMPLATE. TEMPLATEの場合、パラメーターを NULL にすることはできません。If TEMPLATE, parameters must not be NULL.

    • Transact-SQLTransact-SQL ステートメントが sp_executesql を使用して送信され、パラメーターの値が指定されている場合、または SQL ServerSQL Server が内部でステートメントをパラメーター化した後に送信する場合。The Transact-SQLTransact-SQL statement is submitted by using sp_executesql and a value for the parameter is specified, or SQL ServerSQL Server internally submits a statement after parameterizing it.

  10. ステートメントに適用されるクエリ ヒントまたはクエリ プランを [ヒント] Transact-SQLTransact-SQL ボックスに入力します。In the Hints box, enter the query hints or query plan to be applied to the Transact-SQLTransact-SQL statement. 1 つまたは複数のクエリ ヒントを指定するには、有効な OPTION 句を入力します。To specify one or more query hints, enter a valid OPTION clause.

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

plan_guide

T-SQL を使用してプラン ガイドを作成するCreate a plan guide using T-SQL

  1. オブジェクト エクスプローラーで、 データベース エンジンDatabase Engineのインスタンスに接続します。In Object Explorer, connect to an instance of データベース エンジンDatabase Engine.

  2. [標準] ツール バーの [新しいクエリ] をクリックします。On the Standard bar, click New Query.

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。Copy and paste the following example into the query window and click Execute.

    -- 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)」を参照してください。For more information, see sp_create_plan_guide (Transact-SQL).