sp_control_plan_guide (Transact-SQL)
適用於:SQL Server
系統 sp_control_plan_guide
預存程式可用來卸除、啟用或停用計劃指南。
語法
sp_control_plan_guide
[ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
[ , [ @name = ] N'name' ]
[ ; ]
引數
[ @name = ] N'name'
指定正在卸除、啟用或停用的計劃指南。 @name為 sysname,預設值為 NULL
。 @name解析為目前的資料庫。 如果未指定, @name 預設為 NULL
。
[ @operation = ] { N'DROP [ ALL ]' |N'DISABLE [ ALL ]' |N'ENABLE [ ALL ]' }
在 @name 中指定的計劃指南上執行的作業。 @operation為 nvarchar(60),沒有預設值。
DROP
卸除@name所指定的計劃指南。 卸除計劃指南之後,計劃指南先前比對的查詢未來執行不會受到計劃指南的影響。
DROP ALL
卸除目前資料庫中的所有計劃指南。 指定時
DROP ALL
無法指定@name。DISABLE
停用@name所指定的計劃指南。 停用計劃指南之後,計劃指南先前比對的查詢未來執行不會受到計劃指南的影響。
DISABLE ALL
停用目前資料庫中的所有計劃指南。 指定時
DISABLE ALL
無法指定@name。ENABLE
啟用@name所指定的計劃指南。 方案指南可以在啟用之後,與合格的查詢進行比對。 根據預設,計劃指南會在建立時啟用。
ENABLE ALL
啟用目前資料庫中的所有計劃指南。 指定時
ENABLE ALL
無法指定@name。
備註
試圖卸除或修改計畫指南所參考的函數、預存程序或 DML 觸發程序,不論是已啟用或已停用,都會造成錯誤。
停用已停用的計畫指南,或啟用已啟用的計畫指南,都沒有作用,執行時也不會發生錯誤。
每個版本的 SQL Server 都無法使用方案指南。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 的版本和支援功能。 不過,您可以在任何版本的 SQL Server 中使用 或 DROP ALL
選項來執行sp_control_plan_guide
DROP
。
權限
在類型的OBJECT
計劃指南上執行 sp_control_plan_guide
(已建立指定 @type = '<object>'
) 需要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';
GO
B. 停用目前資料庫中的所有計劃指南
下列範例會停用資料庫中的所有計劃指南 AdventureWorks2022
。
USE AdventureWorks2022;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';