次の方法で共有


SET FORCEPLAN (Transact-SQL)

更新 : 2005 年 12 月 5 日

FORCEPLAN を ON に設定すると、Microsoft SQL Server クエリ オプティマイザは、クエリの FROM 句のテーブルと同じ順序で結合を処理します。また、FORCEPLAN を ON に設定すると、クエリのプランの構築に他の種類の結合が必要とされる場合や、結合ヒントまたはクエリ ヒントで他の種類の結合が要求された場合を除き、入れ子になったループ結合が強制的に使用されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

SET FORCEPLAN { ON | OFF }

解説

SET FORCEPLAN は基本的に、クエリ オプティマイザが Transact-SQL SELECT ステートメントの処理で使用するロジックを変更します。SELECT ステートメントから返されるデータは同じであり、この設定とは無関係です。唯一の違いは、クエリの要求を満たすために、SQL Server がテーブルをどのように処理するかという点です。

クエリ内でクエリ オプティマイザ ヒントを使用することによって、SQL Server の SELECT ステートメントの処理方法を変更することもできます。

SET FORCEPLAN は、解析時ではなく実行時に設定されます。

権限

SET FORCEPLAN の実行権限は、特に指定のない限りすべてのユーザーに与えられます。

次の例では、4 つのテーブルの結合を実行します。SHOWPLAN_TEXT が ON に設定されているので、SET FORCE_PLAN が ON に設定された後、SQL Server は、クエリの処理方法がどのように変更されたかに関する情報を返します。

USE AdventureWorks;
GO
-- Make sure FORCEPLAN is set to OFF.
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO
SET SHOWPLAN_TEXT ON;
GO
-- Example where the query plan is not forced.
SELECT c.LastName, c.FirstName, v.Name
FROM Person.Contact AS c
   INNER JOIN HumanResources.Employee AS e
   ON e.ContactID = c.ContactID
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh
   ON e.EmployeeID = poh.EmployeeID
   INNER JOIN Purchasing.Vendor AS v
   ON poh.VendorID = v.VendorID;
GO
-- SET FORCEPLAN to ON.
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN ON;
GO
SET SHOWPLAN_TEXT ON;
GO
-- Reexecute inner join to see the effect of SET FORCEPLAN ON.
SELECT c.LastName, c.FirstName, v.Name
FROM Person.Contact AS c
   INNER JOIN HumanResources.Employee AS e 
   ON e.ContactID = c.ContactID
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh
   ON e.EmployeeID = poh.EmployeeID
   INNER JOIN Purchasing.Vendor AS v
   ON poh.VendorID = v.VendorID;
GO
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO

参照

関連項目

SELECT (Transact-SQL)
SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

追加内容
  • 概要の説明を変更、および、入れ子になったループ結合の強制を追加。