查詢語句在mysql的底層實現

0.說明

某次組會分享的內容:mysql查詢語句的底層執行mysql

1.mysql的邏輯結構

  • 客戶端主要指的是鏈接mysql的應用,主要包括 Navicat 系統 命令行等等;
  • server層是mysql的核心部分;
  • 存儲引擎層 主要是底層數據存取操做的實現部分,由多個存儲引擎組成,他們負責存儲和獲取全部存儲在mysql中的數據。

2.不一樣客戶端鏈接數據庫

3.鏈接器在鏈接過程當中作了什麼?

鏈接器接收到客戶端的鏈接請求響應主要包括5個步驟:算法

  • 客戶端發送鏈接請求
  • 鏈接器接收並建立鏈接對象
  • 鏈接器去系統數據庫load user的權限
  • 把user的權限加載到鏈接對象
  • 鏈接器返回鏈接對象給客戶端

4.若是客戶端鏈接成功並得到鏈接對象,中途修改user表的權限,鏈接對象的權限是否受影響?

5.一條語句的執行過程-語法分析器

MySQL 從你輸入的"select"這個關鍵字識別出來,這是一個查詢語句。它也要把字符 串「T」識別成「表名 T」,把字符串「ID」識別成「列 ID」。 作完了這些識別之後,就要作「語法分析」。根據詞法分析的結果,語法分析器會根據語法 規則,判斷你輸入的這個 SQL 語句是否知足 MySQL 語法。sql

6.一條語句的執行過程-語義檢查

7.一條語句的執行過程-優化器

其中,邏輯查詢優化將生成邏輯查詢執行計劃。根據關係代數的原理,把語法分析樹變爲關係代數語法樹的樣式,原先SQL語義中的一些謂詞變化爲邏輯代數的操做符等樣式
這些樣式是一個臨時的中間狀態,通過進一步的邏輯查詢優化,如執行常量傳遞、選擇下推等(如一些節點下移,一些節點上移),從而生成邏輯查詢執行計劃。數據庫

物理查詢優化除了進行表的鏈接順序調整外,還會使用代價估算模型對單個表的掃描方式、兩錶鏈接的鏈接算法進行評估,選擇每一項操做中代價最小的操做爲下一步優化的基礎。物理查詢優化的最終結果是生成最終物理查詢執行計劃。緩存

8.一條語句的執行過程-執行器

mysql的存儲引擎 是按照插件的形式,提供一個接口給server層去用,這樣的一個好處是,在執行器調用引擎接口的時候,咱們能夠動態的擴展數據庫存儲引擎或者是動態組合存儲引擎,可擴展性比較高。優化

9.一條語句的執行過程-存儲引擎

10.一條語句的執行過程-緩存區

若是中途沒有update或者insert操做,是第二次查詢的話,會直接去緩存區讀取這個結果。避免了磁盤IO,大大提升了數據庫處理查詢的能力。插件

可是若是中途有update或者insert操做。在一個表上有更新的時候,跟這個表有關的查詢緩存會失效,若是是寫多讀少的應用場景的話,效率比較慢。這也就是咱們通常不建議使用查詢緩存的緣由命令行

query_cache_type=0時表示關閉,1時表示打開,2表示只要select中明確指定SQL_CACHE才緩存。3d

查看緩存運行狀態 :好比你想執行某個查詢以前,你能夠查看緩存運行狀態cdn

11.分享一張mysql生態圖

12.總結

  • 關係代數、查詢優化、代價估算模型等等內容對於mysql的優化器部分理解是很是有用的
  • 關於update及delete語句還有關於binlog以及redo log的部分須要探索
相關文章
相關標籤/搜索