Share via


プラン ガイドを作成する方法 (SQL Server Management Studio)

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

次の例では、Transact-SQL ステートメントのプラン ガイドを作成して、FORCESEEK クエリ ヒントをステートメントに適用します。このクエリ ヒントは、インデックスのシーク操作を使用して指定したテーブルのデータにアクセスするよう、オプティマイザーに指示します。

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

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

  2. [データベース] を展開し、AdventureWorks2008R2 データベースを展開して、[プログラミング] を展開します。

  3. [プラン ガイド] を右クリックし、[新しいプラン ガイド] をクリックします。

  4. [名前] に、プラン ガイドの名前として「ForceseekPlan」と入力します。

  5. [ステートメント] に、次の 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
    
  6. [スコープの種類] で、Transact-SQL ステートメントが存在するエンティティの種類として [SQL] を選択します。

  7. [ヒント] に、次の OPTION 句を入力します。

    OPTION (TABLE HINT(HumanResources.Employee, FORCESEEK))
    
    OPTION (TABLE HINT(HumanResources.Employee, FORCESEEK))
    
  8. プラン ガイドを作成するには、[OK] をクリックします。

プラン ガイドがクエリに一致することを確認するには

  1. SQL Server Profiler トレースを開始し、イベントの種類として Plan Guide Successful および Plan Guide Unsuccessful が選択されていることを確認します ([Performance] ノードの下にあります)。

  2. 前の手順の手順 5. で指定したクエリを実行します。

  3. SQL Server Profiler トレースを一時停止します。

  4. 影響するクエリの Plan Guide Successful イベントを検索します。

  5. プラン ガイドがクエリに一致しなかった場合、クエリがプラン ガイド ステートメントで指定されたときと同じ形式で、同じ文字で指定されていることを確認します。これには、タブ、スペース、復帰、または改行も含まれます。