設計引數化查詢的計劃指南
可以為引數化的查詢建立計劃指南。出於以下原因之一,就可以使查詢引數化:
使用 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用計劃指南指定查詢引數化行為
- 使用GraphQL查詢引數來設計強大的APIAPI
- .NET應用架構設計—面向查詢服務的引數化查詢設計(分解業務點,單獨配置各自的資料查詢契約)應用架構
- 查詢最佳化器的引數設定
- Sql Server 的引數化查詢SQLServer
- MySQL引數化查詢的IN 和 LIKEMySql
- oracle 查詢計劃中的基數cardinality概念(二)Oracle
- oracle 查詢計劃中的基數cardinality概念(一)Oracle
- 抽象SQL引數化查詢VK抽象SQL
- explain 查詢執行計劃AI
- 查詢計劃中集的勢(Cardinality)的計算
- SQL Server 2008將計劃指南與查詢匹配SQLServer
- 查詢初始化引數的方法(二)
- 查詢初始化引數的方法(一)
- 查詢初始化引數的方法(七)
- 查詢初始化引數的方法(六)
- 查詢初始化引數的方法(五)
- 查詢初始化引數的方法(四)
- 查詢初始化引數的方法(三)
- SOLIDWORKS引數化設計方法Solid
- Oracle查詢優化器的相關引數Oracle優化
- TiDB 查詢優化及調優系列(二)TiDB 查詢計劃簡介TiDB優化
- 隱含引數的查詢
- TiDB 查詢優化及調優系列(四)查詢執行計劃的調整及優化原理TiDB優化
- 執行計劃-6:推入子查詢
- 通用查詢設計思想
- 靈活的查詢設計方案
- 對GPDB查詢計劃的Motion結點的理解
- 資料庫設計與查詢語句的優化資料庫優化
- 【讀書筆記】《PostgreSQL指南-內幕探索》-3.3建立單表查詢的計劃樹筆記SQL
- Oracle隱含引數的查詢Oracle
- /*+ START */ 強制使用星型查詢計劃
- 程式設計師你如何檢查引數的合法性?程式設計師
- MySQL中in(獨立子查詢)的執行計劃MySql
- 開啟查詢慢查詢日誌引數
- 查詢hadoop引數變數Hadoop變數
- 透過DMV查詢CPU時間最長的語句和查詢計劃
- MySQL查詢優化之優化器工作流程以及優化的執行計劃生成MySql優化