新しいプラン ガイドの作成
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 の使用
プラン ガイドを作成するには
プラス記号をクリックして、作成するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。
[プラン ガイド] フォルダーを右クリックし、[新しいプラン ガイド] をクリックします。
[新しいプラン ガイド] ダイアログ ボックスの [名前] ボックスに、プラン ガイドの名前を入力します。
[ステートメント] ボックスに、プラン ガイドの適用対象の 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] をクリックします。
[先頭に戻る]
Transact-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)」を参照してください。
[先頭に戻る]