設計引數化查詢的計劃指南

iSQlServer發表於2008-11-26

可以為引數化的查詢建立計劃指南。出於以下原因之一,就可以使查詢引數化:

使用 sp_executesql 提交查詢。

在資料庫中啟用強制引數化。這將使所有合格的查詢引數化。

已對此查詢所屬的一類查詢建立了單獨的計劃指南,指定應將這些查詢引數化。

當對引數化的查詢建立計劃指南時,實質上是在建立將所有查詢引數化為同一格式的計劃指南。這些查詢只是常量文字值不同。例如,在啟用強制引數化的資料庫中,下列兩個查詢將引數化為同一格式:

 複製程式碼
SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel pm INNER JOIN Production.ProductInventory pi ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING sum(pi.Quantity) > 50;
 複製程式碼
SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel pm INNER JOIN Production.ProductInventory pi ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING sum(pi.Quantity) > 100;若要為引數化的查詢建立計劃指南,請建立型別為 SQL 的計劃指南並指定 sp_create_plan_guide 儲存過程中的查詢引數化格式。

例如,若要獲取上一示例中其中一個查詢的引數化格式並在其上建立計劃指南以強制優化器使用雜湊聯接,請按以下步驟操作:

通過執行 sp_get_query_template 來獲取查詢的引數化格式。

如果 SQL Server 還未使用 sp_executesql 或 PARAMETERIZATION FORCED 資料庫的 SET 選項使查詢引數化,請建立型別為 TEMPLATE 的計劃指南以強制引數化。

對引數化查詢建立型別 SQL 的計劃指南。

以下批處理執行所有的這三個步驟:

 複製程式碼
--Obtain the paramaterized form. of the query:
DECLARE @stmt nvarchar(max);
DECLARE @params nvarchar(max);
EXEC sp_get_query_template N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
    FROM Production.ProductModel pm
    INNER JOIN Production.ProductInventory pi
        ON pm.ProductModelID = pi.ProductID
    WHERE pi.ProductID = 101
    GROUP BY pi.ProductID, pi.Quantity
    HAVING SUM(pi.Quantity) > 50',
@stmt OUTPUT,
@params OUTPUT;
--Force parameterization of the query. (This step is only required
--if the query is not already being parameterized.)
EXEC sp_create_plan_guide N'TemplateGuide1',
    @stmt,
N'TEMPLATE',
NULL,
@params,
N'OPTION(PARAMETERIZATION FORCED)';
--Create a plan guide on the parameterized query
EXEC sp_create_plan_guide N'GeneralizedGuide1',
@stmt,
N'SQL',
NULL,
@params,
N'OPTION(HASH JOIN)';此時計劃指南將應用於所有引數化為指定的格式,但包含不同常量文字值的查詢。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503350/,如需轉載,請註明出處,否則將追究法律責任。

相關文章