理解SQL查詢的底層原理

本系列【T-SQL】主要是針對T-SQL的總結。算法

1、SQL Server組成部分

1.關係引擎:主要做用是優化和執行查詢。

包含三大組件:

(1)命令解析器:檢查語法和轉換查詢樹。

(2)查詢執行器:優化查詢。

(3)查詢優化器:負責執行查詢。

2.存儲引擎:管理全部數據及涉及的IO

包含三大組件:

(1)事務管理器:經過鎖來管理數據及維持事務的ACID屬性。

(2)數據訪問方法:處理對行、索引、頁、行版本、空間分配等的I/O請求。

(3)緩衝區管理器:管理SQL Server的主要內存消耗組件Buffer Pool。

3.Buffer Pool

包含SQL Server的全部緩存。如計劃緩存和數據緩存。

4.事務日誌

記錄事務的全部更改。保證事務ACID屬性的重要組件。

5.數據文件

數據庫的物理存儲文件。

6.SQL Server網絡接口

創建在客戶端和服務器之間的網絡鏈接的協議層

2、查詢的底層原理

1.當客戶端執行一條T-SQL語句給SQL Server服務器時,會首先到達服務器的網絡接口,網絡接口和客戶端之間有協議層。

2.客戶端和網絡接口之間創建鏈接。使用稱爲「表格格式數據流」(TDS) 數據包的 Microsoft 通訊格式來格式化通訊數據。

3.客戶端發送TDS包給協議層。協議層接收到TDS包後,解壓並分析包裏面包含了什麼請求。

4.命令解析器解析T-SQL語句。命令解析器會作下面幾件事情:

(1)檢查語法。發現有語法錯誤就返回給客戶端。下面的步驟不執行。

(2)檢查緩衝池(Buffer Pool)中是否存在一個對應該T-SQL語句的執行計劃緩存。

(3)若是找到已緩存的執行計劃,就從執行計劃緩存中直接讀取,並傳輸給查詢執行器執行。

(4)若是未找到執行計劃緩存,則在查詢執行器中進行優化併產生執行計劃,存放到Buffer Pool中。

5.查詢優化器優化SQL語句

當Buffer Pool中沒有該SQL語句的執行計劃時,就須要將SQL傳到查詢優化器,經過必定的算法,分析SQL語句,產生一個或多個候選執行計劃。選出開銷最小的計劃做爲最終執行計劃。而後將執行計劃傳給查詢執行器。

6.查詢執行器執行查詢

查詢執行器把執行計劃經過OLE DB接口傳給存儲引擎的數據訪問方法。

7.數據訪問方法生成執行代碼

數據訪問方法將執行計劃生成SQL Server可操做數據的代碼,不會實際執行這些代碼,傳送給緩衝區管理器來執行。

8.緩衝區管理器讀取數據。

先在緩衝池的數據緩存中檢查是否存在這些數據,若是存在,就把結果返回給存儲引擎的數據訪問方法;若是不存在,則從磁盤(數據文件)中讀出數據並放入數據緩存中,而後將讀出的數據返回給存儲引擎的數據訪問方法。

9.對於讀取數據,將會申請共享鎖,事務管理器分配共享鎖給讀操做。

10.存儲引擎的數據訪問方法將查詢到的結果返回關係引擎的查詢執行器。

11.查詢執行器將結果返回給協議層。

12.協議層將數據封裝成TDS包,而後協議層將TDS包傳給客戶端。

 

參考資料:

https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms722784(v=vs.85).aspx

《SQL Server 性能優化與管理的藝術》

 

->>【T-SQL】系列文章全文目錄(2017-06-02更新)


做  者: Jackson0714
出  處:http://www.cnblogs.com/jackson0714/
關於做者:專一於微軟平臺的項目開發。若有問題或建議,請多多賜教!
版權聲明:本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
特此聲明:全部評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:若是您以爲文章對您有幫助,能夠點擊文章右下角推薦一下。您的鼓勵是做者堅持原創和持續寫做的最大動力!

 

出處連接:http://www.cnblogs.com/jackson0714/p/SQL_Query_Mechanism.html

相關文章
相關標籤/搜索