天天看點

資料庫必知詞彙:查詢優化器

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

主流的查詢優化器主要包括兩種,即基于文法的和基于成本的。

基于文法的查詢優化器完全根據查詢的準确文法來選擇規劃,這是建立在查詢中子句的順序的基礎上的。一旦標明了一個規劃,該查詢就将完全按照該計劃執行,并且執行的順序就是子句的順序。基于文法的查詢不需要儲存分布統計。随着表的分布的改變,一段時間後,所標明的查詢規劃就可能不再有那麼好的性能。

基于成本的查詢優化器分析資料和索引列的分布統計,進而根據完成查詢的成本決定效率最高的執行規定。成本是根據資源使用率來測量的。響應時間也是影響成本的一個因素。資料庫尋求能夠以最快的速度把結果傳回給使用者并且不會導緻其他方面性能下降的途徑。是以,在具有多個處理器的系統中,查詢處理器可能選擇這樣的執行規劃,雖然它的總體成本比其他的執行規劃要大一些,但是它可以更快地把結果傳回給使用者,并且不會降低其他方面的性能。

分布統計是從索引和表中的資料列的分布資訊彙總出來的,并且由資料庫自動在建立了索引的列上建立和維護。也可以選擇把統計建立在沒有索引的列上。基于成本的優化器将分析各種查詢規劃,并且作為其評價标準的資訊,包括被請求的資料量以及處理過程花費的時間,具體表現在對CPU和記憶體的影響以及I/O操作的次數。

資料來源:

黃钊吉著 .SQL Server性能優化與管理的藝術.北京:機械工業出版社,2014

[美]Jenney Lynne Fields著 袁勤勇 何欣等譯.Microsoft SQL Server 2000優化指南.北京:清華大學出版社,2001

微軟公司著.資料庫程式設計:SQL Server2000資料庫程式設計 .北京:高等教育出版社,2007