理解SQL查詢的底層原理
閱讀目錄
- 一、SQL Server組成部分
- 二、查詢的底層原理
本系列【T-SQL】主要是針對T-SQL的總結。
T-SQL基礎
【T-SQL基礎】01.單表查詢-幾道sql查詢題
【T-SQL基礎】02.聯接查詢
【T-SQL基礎】03.子查詢
【T-SQL基礎】04.表表達式-上篇
【T-SQL基礎】04.表表達式-下篇
【T-SQL基礎】05.集合運算
【T-SQL基礎】06.透視、逆透視、分組集
【T-SQL基礎】07.數據修改
【T-SQL基礎】08.事務和並發
【T-SQL基礎】09.可編程對象
T-SQL進階
【T-SQL進階】01.好用的SQL TVP~~獨家贈送[增-刪-改-查]的例子
【T-SQL進階】02.理解SQL查詢的底層原理
T-SQL性能調優
【T-SQL性能調優】01.TempDB的使用和性能問題
持續更新......歡迎關註我!
回到頂部一、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網絡接口
建立在客戶端和服務器之間的網絡連接的協議層
回到頂部二、查詢的底層原理
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查詢的底層原理