SQL Server 2008將計劃指南與查詢匹配
SQL Server 將 OBJECT 型別的計劃嚮導與在 sp_create_plan_guide 儲存過程的 @module_or_batch 引數中命名的儲存過程、觸發器、或函式(模組)內出現的查詢匹配。如果計劃嚮導位於模組中,則該計劃嚮導將與指定的查詢匹配。
對於在批處理內提交的查詢,SQL Server 通過首先嚐試將查詢與基於 SQL 的計劃嚮導匹配,再嘗試引數化查詢,然後再次嘗試匹配其他查詢,直到將計劃嚮導與這些查詢匹配為止。下圖簡要介紹了這一過程。
SQL Server 查詢優化器將執行的批處理識別為編譯批處理內的每條語句的請求。
對於批處理內的特定語句,SQL Server 嘗試將該語句與基於 SQL 的計劃指南匹配,該指南的 @module_or_batch 引數與傳入批處理文字的引數匹配(包含所有常量文字值);該指南的 @stmt 引數也與批處理中的語句匹配。如果存在此類計劃指南並且匹配成功,則會修改語句文字,以包括計劃指南中指定的查詢提示。隨後將相應地編譯語句。
如果計劃嚮導與步驟 2 中的語句不匹配,則 SQL Server 將嘗試使用強制引數化來引數化該語句。在此步驟中,引數化可能由於下列任何一個原因而失敗:
該語句已經被引數化,或者包含本地變數。
應用了 PARAMETERIZATION SIMPLE 資料庫 SET 選項(預設設定),但沒有將任何 TEMPLATE 型別的計劃嚮導應用於該語句,並且沒有任何 TEMPLATE 型別的計劃嚮導指定 PARAMETERIZATION FORCED 查詢提示。
已經有 TEMPLATE 型別的計劃嚮導應用於該語句,並且指定 PARAMETERIZATION SIMPLE 查詢提示。
如果強制引數化成功,則 SQL Server 嘗試將引數化格式的該語句與對該引數化語句建立的 SQL 型別的計劃嚮導匹配。如果存在此類計劃指南並且匹配成功,則會修改語句文字,以包括計劃指南中指定的查詢提示。隨後將相應地編譯語句。如果未與此類計劃嚮導匹配,將編譯該引數化語句,而無需事先由計劃嚮導修改該語句。
如果步驟 3 中的引數化失敗,SQL Server 將再次嘗試引數化該語句。這一次,SQL Server 將應用預設的簡單引數化行為。然後,直接編譯結果查詢。計劃嚮導與簡單引數化的結果不匹配。
注意:
在應用於通過強制引數化或簡單引數化進行引數化的查詢的 SQL 型別的計劃嚮導中,將忽略 RECOMPILE 查詢提示。還會發出一條警告。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503352/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 建立SQL Server 2008的計劃指南SQLServer
- SQL Server 2008 查詢優化SQLServer優化
- SQL Server查詢計劃系列之——邏輯運算子與物理運算子SQLServer
- 優化SQL Server 2008的查詢效能優化SQLServer
- SQL Server 2008 高階查詢優化概念SQLServer優化
- 設計引數化查詢的計劃指南
- SQL Server 2008 實施查詢優化建議SQLServer優化
- SQL Server 查詢分解SQLServer
- SQL Server遞迴查詢SQLServer遞迴
- SQL SERVER 查詢鎖資訊SQLServer
- SQL server跨庫查詢SQLServer
- Sql Server系列:子查詢SQLServer
- SQL server 查詢語句SQLServer
- SQL Server 分散式查詢SQLServer分散式
- SQL SERVER 動態查詢SQLServer
- SQL Server 跨域查詢SQLServer跨域
- SQL Server 2005:查詢統計資訊SQLServer
- 使用計劃指南指定查詢引數化行為
- 透過查詢檢視sql執行計劃SQL
- sql-server高階查詢SQLServer
- SQL Server阻塞查詢語句SQLServer
- Sql Server系列:巢狀查詢SQLServer巢狀
- SQL Server 查詢優化功能SQLServer優化
- sql server分組查詢示例SQLServer
- Sql Server 2005/2008 SqlCacheDependency查詢通知的使用總結SQLServer
- SQL Server執行計劃SQLServer
- SQL Server將直接傳遞查詢作為表使用的方法SQLServer
- SQL Server 跨資料庫查詢SQLServer資料庫
- Sql Server 的引數化查詢SQLServer
- sql-server不相關子查詢SQLServer
- sql-server相關子查詢SQLServer
- sql server的許可權查詢SQLServer
- Sql Server系列:多表連線查詢SQLServer
- SQL SERVER 跨伺服器查詢SQLServer伺服器
- 查詢當前SQL Server的版本SQLServer
- MS SQL Server查詢優化方法SQLServer優化
- SQL Server之查詢檢索操作SQLServer
- 我如何調優SQL Server查詢SQLServer