mysql知識(1)

一、sql執行順序

from -> on -> join -> where -> group by -> having -> select -> distinct -> order by -> limit

其中,MySQL中where的執行順序是從左往右,因此,篩選粒度最大的放在最左邊這樣效率最高。

二、mysql架構

主要分爲server層和存儲引擎層。

server層主要分爲連接器、解析器、優化器、執行器和查詢緩存;

存儲引擎層與數據的讀寫操作有關,是MySQL與物理磁盤交互的部分,在mysql中以插件形式使用。

連接器:主要負責給用戶創建並維護連接以及用戶的認證和鑑權;

查詢緩存:如果開啓了查詢緩存,那麼查詢操作時如果查詢緩存中有這條sql的結果,那麼直接就從查詢緩存中取,不需要進行後續步驟。當有DML和DQL操作時,會清空查詢緩存。一般不建議使用,MySQL8之後已經去除查詢緩存的功能。

解析器:主要有兩個功能詞法解析和語法解析。詞法解析是根據空格將sql語句拆分,拆分出關鍵字和非關鍵字(表、數據庫名)進行處理。語法解析是進行sql語法校驗,檢查是否符合sql標準並分析是DDL、DML、DCL還是DQL語句。

優化器:優化索引,會選擇一個索引進行使用,並將where條件的順序進行一定的優化,形成執行計劃。DQL和DML會走到優化器(因爲有where條件)。

執行器:將優化後的執行計劃,調用存儲引擎層,完成對應的操作。

ææ¯å享

三、一次sql的執行過程

客戶端發送sql :

select * from t where id = 1

服務端的執行過程:

1.連接器與客戶端建立連接,判斷用戶名密碼和權限;

2.查詢緩存中,有-> 直接返回 沒有-> 進行下面的步驟;

3.調用解析器進行詞法和語法分析,形成一棵二叉搜索樹,並判斷要進行何種操作(DDL,DML,DCL, DQL);

4.調用優化器,對sql進行優化,形成執行計劃,選擇使用一個索引進行搜索;

5.調用執行器按照執行計劃調用存儲引擎層;

6.將結果返回給客戶端,並存儲在查詢緩存中。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章