摘自:悟空聊架構之理解t-sql理解底層查詢原理 特此記錄一下
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包傳給客戶端。
我自己理解的順序:
客戶端——>sql——>協議層——>解析語句——>根據語句進行查詢優化——>執行優化的語句——>生成可執行的**(這時候不執行,只是生成執行**)——>緩衝區讀取執行**——>儲存引擎資料訪問——返回資料到查詢執行器——>返回到協議層——>返回到客戶端
理解SQL查詢的底層原理
閱讀目錄 本系列 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 s...
SQL中 left join 的底層原理
left join的實現效果就是保留左表的全部資訊,將右表往左表上拼接,如果拼不上則為null。除了left join以外,還有inner join outer join right join等,文章不介紹其他連線的具體效果,主要講解join的底層原理是如何實現的?具體效果是怎樣呈現的?只有懂得了底...
HashMap底層原理
1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...