sp_control_plan_guide (Transact-SQL)
卸除、啟用或停用計劃指南。
語法
sp_control_plan_guide [ @operation = ] N'<control_option>'
[ , [ @name = ] N'plan_guide_name' ]
<control_option>::=
{
DROP
| DROP ALL
| DISABLE
| DISABLE ALL
| ENABLE
| ENABLE ALL
}
引數
- N'plan_guide_name'
指定要卸除、啟用或停用的計劃指南。plan_guide_name 會解析為目前資料庫。若未指定,plan_guide_name 會預設為 NULL。
- DROP
卸除 plan_guide_name 所指定的計劃指南。在卸除計劃指南之後,未來執行先前符合計劃指南的查詢時,不會受計劃指南的影響。
- DROP ALL
卸除目前資料庫中的所有計劃指南。當指定 DROP ALL 時,無法指定 **N'**plan_guide_name 。
- DISABLE
停用 plan_guide_name 所指定的計劃指南。在停用計劃指南之後,未來執行先前符合計劃指南的查詢時,不會受計劃指南的影響。
- DISABLE ALL
停用目前資料庫中的所有計劃指南。當指定 DISABLE ALL 時,無法指定 **N'**plan_guide_name 。
- ENABLE
啟用 plan_guide_name 所指定的計劃指南。計劃指南在啟用之後,可以符合適合的查詢。依預設,在建立計劃指南時,會啟用計劃指南。
- ENABLE ALL
啟用目前資料庫中的所有計劃指南。當指定 ENABLE ALL 時,無法指定 **N'plan_guide_name'****。
備註
試圖卸除或修改計劃指南所參考的函數、預存程序或 DML 觸發程序,不論是已啟用或已停用,都會造成錯誤。
停用已停用的計劃指南,或啟用已啟用的計劃指南,都沒有作用,執行時也不會發生錯誤。
您可以在任何版本的 Microsoft SQL Server 2005 中,設定 DROP 或 DROP ALL 選項來執行 sp_control_plan_guide;不過,所有其他選項都只適用於 Standard Edition 和 Enterprise Edition。
權限
在 OBJECT 類型的計劃指南 (指定 @type ='OBJECT' 來建立) 上執行 sp_control_plan_guide,需要計劃指南所參考之物件的 ALTER 權限。所有其他計劃指南都需要 ALTER DATABASE 權限。
範例
A. 啟用、停用和卸除計劃指南
下列範例會建立一份計劃指南,以及停用、啟用再卸除這份計劃指南。
--Create a procedure on which to define the plan guide.
IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL
DROP PROCEDURE Sales.GetSalesOrderByCountry;
GO
CREATE PROCEDURE Sales.GetSalesOrderByCountry
(@Country nvarchar(60))
AS
BEGIN
SELECT *
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID
INNER JOIN Sales.SalesTerritory AS t ON c.TerritoryID = t.TerritoryID
WHERE t.CountryRegionCode = @Country;
END
GO
--Create the plan guide.
EXEC sp_create_plan_guide N'Guide3',
N'SELECT *
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID
INNER JOIN Sales.SalesTerritory AS t ON c.TerritoryID = t.TerritoryID
WHERE t.CountryRegionCode = @Country',
N'OBJECT',
N'Sales.GetSalesOrderByCountry',
NULL,
N'OPTION (OPTIMIZE FOR (@Country = N''US''))';
GO
--Disable the plan guide.
EXEC sp_control_plan_guide N'DISABLE', N'Guide3';
GO
--Enable the plan guide.
EXEC sp_control_plan_guide N'ENABLE', N'Guide3';
GO
--Drop the plan guide.
EXEC sp_control_plan_guide N'DROP', N'Guide3';
B. 停用目前資料庫中的所有計劃指南
下列範例會停用 AdventureWorks
資料庫的所有計劃指南。
USE AdventureWorks;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';
請參閱
參考
Database Engine 預存程序 (Transact-SQL)
系統預存程序 (Transact-SQL)
sp_create_plan_guide (Transact-SQL)
sys.plan_guides