新しいプラン ガイドの作成
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance
プラン ガイドは、クエリ ヒントまたは固定クエリ プランをクエリにアタッチすることにより、クエリの最適化を促します。 プラン ガイドでは、最適化するステートメントと、使用するクエリ ヒントを含む OPTION 句 またはクエリの最適化に使用する特定のクエリ プランのいずれかを指定します。 クエリが実行されると、クエリ オプティマイザーにより Transact-SQL ステートメントがプラン ガイドと照合され、実行時にクエリに OPTION 句がアタッチされるか、指定されたクエリ プランが使用されます。
プラン ガイドは固定クエリ プランまたはクエリ ヒントをクエリに適用します。
制限事項と制約事項
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 権限が必要です。
SSMS を使用してプラン ガイドを作成する
プラス記号をクリックして、作成するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。
[プラン ガイド] フォルダーを右クリックし、[新しいプラン ガイド]...をクリックします。
[新しいプラン ガイド] ダイアログ ボックスの [名前] ボックスに、プラン ガイドの名前を入力します。
[ステートメント] ボックスに、プラン ガイドの適用対象の Transact-SQL ステートメントを入力します。
[スコープの種類] ボックスの一覧で、 Transact-SQL ステートメントが存在するエンティティの種類を選択します。 これは Transact-SQL ステートメントとプラン ガイドを照合するコンテキストを示します。 選択できる値は、 OBJECT、 SQL、および TEMPLATEです。
[スコープのバッチ] ボックスに、 Transact-SQL ステートメントを含むバッチ テキストを入力します。 バッチ テキストには、
USE
database ステートメントを含めることはできません。 [スコープのバッチ] ボックスは、スコープの種類として [SQL] を選択した場合にのみ利用できます。 スコープの種類が SQL であるとき、[スコープのバッチ] ボックスに何も入力しなかった場合、バッチ テキストの値は、 [ステートメント] ボックスと同じ値に設定されます。[スコープのスキーマ名] ボックスに、対象のオブジェクトを含んでいるスキーマの名前を入力します。 [スコープのスキーマ名] ボックスは、スコープの種類として [オブジェクト] を選択した場合にのみ利用できます。
[スコープのオブジェクト名] ボックスに、 Transact-SQL ステートメントを含む Transact-SQL ストアド プロシージャ、ユーザー定義スカラー関数、複数ステートメントのテーブル値関数、または DML トリガーの名前を入力します。 [スコープのオブジェクト名] ボックスは、スコープの種類として [オブジェクト] を選択した場合にのみ利用できます。
Transact-SQL ステートメントに埋め込まれているすべてのパラメーターの名前とデータ型を [パラメーター] ボックスに入力します。
パラメーターは、次の条件のいずれかを満たす場合にのみ適用されます。
スコープの種類が SQL または TEMPLATEの場合。 TEMPLATEの場合、パラメーターを NULL にすることはできません。
Transact-SQL ステートメントが sp_executesql を使用して送信され、パラメーターの値が指定されている場合、または SQL Server が内部でステートメントをパラメーター化した後に送信する場合。
Transact-SQL ステートメントに適用されるクエリ ヒントまたはクエリ プランを [ヒント] ボックスに入力します。 1 つまたは複数のクエリ ヒントを指定するには、有効な OPTION 句を入力します。
OK をクリックします。
T-SQL を使用してプラン ガイドを作成する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
-- 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)」を参照してください。