查詢最佳化器

查詢最佳化器

查詢最佳化器是SQL Server針對用戶的請求進行內部最佳化,生成(或重用)執行計畫並傳輸給存儲引擎來運算元據,最終返回結果給用戶的組件。查詢最佳化器是關係型資料庫管理系統的核心之一,決定對特定的查詢使用哪些索引、哪些關聯算法、從而使其高效運行,它是最佳化器中最重要的組件之一。

基本介紹

  • 中文名:查詢最佳化器
  • 外文名:query optimizer
  • 簡稱:最佳化器
  • 類型:基於語法和基於成本的最佳化器
  • 地位:是關係型資料庫管理系統核心之一
  • 套用學科:資料庫管理
定義,類型,工作過程,關係,

定義

查詢最佳化器(簡稱最佳化器)是負責生成 SQL 語句的有效執行計畫的 SQL Server 資料庫引擎組件,具體地說,查詢最佳化器是SQL Server針對用戶的請求進行內部最佳化,生成(或重用)執行計畫並傳輸給存儲引擎來運算元據,最終返回結果給用戶的組件。它是關係型資料庫管理系統的核心之一,決定對特定的查詢使用哪些索引、哪些關聯算法、從而使其高效運行,它是最佳化器中最重要的組件之一。

類型

基於語法
基於語法的查詢最佳化器完全根據查詢的準確語法來選擇規劃,這是建立在查詢中子句的順序的基礎上的。一旦選定了一個規劃,該查詢就將完全按照該計畫執行,並且執行的順序就是子句的順序。基於語法的查詢不需要保存分布統計。隨著表的分布的改變,一段時間後,所選定的查詢規劃就可能不再有那么好的性能。
基於成本
基於成本的查詢最佳化器分析數據和索引列的分布統計,從而根據完成查詢的成本決定效率最高的執行規定。成本是根據資源利用率來測量的。回響時間也是影響成本的一個因素。SQL Server尋求能夠以最快的速度把結果返回給用戶並且不會導致其他方面性能下降的途徑。因此,在具有多個處理器的系統中,查詢處理器可能選擇這樣的執行規劃,雖然它的總體成本比其他的執行規劃要大一些,但是它可以更快地把結果返回給用戶,並且不會降低其他方面的性能。
分布統計是從索引和表中的數據列的分布信息匯總出來的,並且由SQL Server自動在建立了索引的列上創建和維護。也可以選擇把統計建立在沒有索引的列上。基於成本的最佳化器將分析各種查詢規劃,並且作為其評價標準的信息,包括被請求的數據量以及處理過程花費的時間,具體表現在對CPU和記憶體的影響以及I/O操作的次數。

工作過程

在提交查詢之後,執行以下幾個步驟將原始查詢轉換為查詢最佳化器能夠解釋的格式。
解析過程
解析是分析SQL語句並將其轉換成可被編譯的數據結構的過程,解析過程還包括確認SQL語句語法的有效性。解析過程對引入的查詢進行語法檢查,並將該語法分解成多個關係資料庫引擎能夠回響的部分。本步驟的輸出是解析後的查詢樹。
解析並不包括諸如檢查表名和列名的有效性這樣的操作,這些操作將在規範化過程中處理。規範化過程主要確定SQL語句所引用的對象的特徵,並檢查請求語義是否正確。例如,嘗試執行一個表在語義上是不合邏輯的。
標準化過程
標準化過程把查詢轉換成最佳化過程可以使用的格式,檢測到的任何冗餘語法的子句都要被移除。如果有可能,也將子查詢標準化。本步驟的輸出是一個標準化的查詢樹。
查詢最佳化
從幾個可能的計畫中選擇一個執行計畫的過程稱為最佳化。這個階段包括很多步驟,不過,對執行計畫的開銷影響最大的步驟只有查詢分析、索引選擇和聯接選擇。
編譯
這個階段是把查詢編譯成可執行的代碼
資料庫訪問例程
查詢最佳化器通過掃描表或使用可用的索引,來確定訪問數據的最好方法,然後會套用該方法。

關係

查詢最佳化器使用表和索引的分布統計來決定查詢的效率最高的執行規劃。查詢最佳化器使用分布統計來估計能夠滿足查詢的每一個規劃的資源消耗,例如索引或者視圖,保持當前的分布統計是維持SQL Server的良好性能的關鍵。
統計的更新方式有兩種:如果數據已經存在於表中,就會在第一次創建索引的時候進行更新;另外一種方式是在執行UPDATE STATISTICS命令的時候進行更新。UPDATE STATISTICS命令可以手工或者自動執行。可以把統計的更新定義為資料庫維護計畫的一部分,或者由自動更新功能來觸發。如果統計信息過時了,查詢最佳化器不能做出最明智的決定。如果在Query Analyzer的“Graphical ShowPlan”選項中查看每一個查詢的執行規劃,節點信息將會顯示統計是否需要被更新。

相關詞條

熱門詞條

聯絡我們