プラン ガイドを作成する方法 (SQL Server Management Studio)
このトピックでは、SQL Server Management Studio を使用してプラン ガイドを作成する方法について説明します。プラン ガイドは、クエリ ヒントまたは固定クエリ プランをクエリにアタッチすることにより、クエリの最適化を促します。プラン ガイドでは、最適化する Transact-SQL ステートメントと、使用するクエリ ヒントを含む OPTION 句またはクエリの最適化に使用する特定のクエリ プランのいずれかを指定します。クエリが実行されると、クエリ オプティマイザーにより Transact-SQL ステートメントがプラン ガイドと照合され、実行時にクエリに OPTION 句がアタッチされるか、指定されたクエリ プランが使用されます。
次の例では、Transact-SQL ステートメントのプラン ガイドを作成して、FORCESEEK クエリ ヒントをステートメントに適用します。このクエリ ヒントは、インデックスのシーク操作を使用して指定したテーブルのデータにアクセスするよう、オプティマイザーに指示します。
プラン ガイドの例を作成するには
オブジェクト エクスプローラーで、データベース エンジンに接続し、そのインスタンスを展開します。
[データベース] を展開し、AdventureWorks2008R2 データベースを展開して、[プログラミング] を展開します。
[プラン ガイド] を右クリックし、[新しいプラン ガイド] をクリックします。
[名前] に、プラン ガイドの名前として「ForceseekPlan」と入力します。
[ステートメント] に、次の Transact-SQL ステートメントを入力します。これは、プラン ガイドを適用する対象のステートメントです。
SELECT p.LastName, p.FirstName, HumanResources.Employee.JobTitle FROM HumanResources.Employee JOIN Person.Person AS p ON HumanResources.Employee.BusinessEntityID = p.BusinessEntityID WHERE HumanResources.Employee.OrganizationLevel = 3 ORDER BY p.LastName, p.FirstName SELECT p.LastName, p.FirstName, HumanResources.Employee.JobTitle FROM HumanResources.Employee JOIN Person.Person AS p ON HumanResources.Employee.BusinessEntityID = p.BusinessEntityID WHERE HumanResources.Employee.OrganizationLevel = 3 ORDER BY p.LastName, p.FirstName
[スコープの種類] で、Transact-SQL ステートメントが存在するエンティティの種類として [SQL] を選択します。
[ヒント] に、次の OPTION 句を入力します。
OPTION (TABLE HINT(HumanResources.Employee, FORCESEEK)) OPTION (TABLE HINT(HumanResources.Employee, FORCESEEK))
プラン ガイドを作成するには、[OK] をクリックします。
プラン ガイドがクエリに一致することを確認するには
SQL Server Profiler トレースを開始し、イベントの種類として Plan Guide Successful および Plan Guide Unsuccessful が選択されていることを確認します ([Performance] ノードの下にあります)。
前の手順の手順 5. で指定したクエリを実行します。
SQL Server Profiler トレースを一時停止します。
影響するクエリの Plan Guide Successful イベントを検索します。
プラン ガイドがクエリに一致しなかった場合、クエリがプラン ガイド ステートメントで指定されたときと同じ形式で、同じ文字で指定されていることを確認します。これには、タブ、スペース、復帰、または改行も含まれます。