1. 程式人生 > 其它 >MYSQL-SQL語句簡單執行過程

MYSQL-SQL語句簡單執行過程

執行過程如圖:

客戶端->連線層->Server層->Engine層->資料檔案

1.客戶端

1.客戶端發起sql語句

2.連線層

2.連線層接收到客戶端的sql請求
3.使用者驗證
資料庫一啟動會把mysql.user,mysql.db,mysql.table_priv,mysql.column_priv 
等這些授權表載入到記憶體,以便與進行使用者驗證,如:如密碼是否過期,使用者密碼是否正確等。
4.提供連線執行緒。當與客戶端建立連線之後,MySQL會專門生成一個連線執行緒為這個請求服務。(可通過命令"show processlist;" 檢視連線情況 )

3.Server層

5.預處理,server層接收到sql語句後,進行預處理;對語法、語義、許可權相關等處理
   語義:select,update,ddl,dcl等操作。
   許可權:操作物件的許可權。
6.解析,預處理完成之後,對語句進行解析,將語句拆分成多個塊,然後用樹形結構表示語句的執行邏輯。解析出來的樹形結構,稱之為AST抽象語法樹。
 例如:select id,count(*) from test.t1 where id>1 group by id order by id asc;
 解析過程:from..where..group by..select..order by。 這就是該語句的執行順序
7.優化,解析樹生成之後,進入優化過程。優化分兩個階段:先邏輯優化,再物理優化。	
邏輯優化:邏輯優化:基於優化器演算法進行優化,根據抽象語法樹,進行關係代數的等價轉換,例如:sql改寫、索引條件順序調整、關聯表的時候先過濾驅動表的條件,然後將結果進行關聯。
物理優化:物理優化會參考統計資訊內容(統計資訊描述資料分佈、資料儲存、索引相關資訊 )及優化器演算法(如ICP),最終得出代價最低的執行計劃。
8.執行計劃:優化完成後,生成執行計劃,將語句交給engine層執行。

4.Engien層

9.InnoDB的io執行緒接收到Server層生成的執行計劃,去磁碟檔案中獲取相關的資料檔案,並返回結果

小結:
1.這是sql大致的執行過程,更加詳細的可以參考官網文件。