sql執行過程

sql執行過程

一個sql語句是如何執行的?從mysql服務架構說起。
mysql內部大致分爲服務層和存儲引擎層兩部分

  • 服務層:
    包含連接器、查詢緩存、分析器、優化器、執行器等。涵蓋mysql的大多數核心服務功能及所有內置函數(如日期、時間、數據和加密等)所有跨存儲引擎的功能都將在這一層實現,比如存儲過程、觸發器、視圖、函數等,也包括通用的binlog日誌模塊。
  • 存儲引擎層:
    包含數據的存儲和提取。採用可以替換的插件式架構,支持innodb、myisam、memory等多個存儲引擎。

連接器

所有的sql操作都將使用連接器,主要負責用戶登陸數據庫時,進行用戶的身份認證,包括校驗賬戶、密碼、權限等操作。

查詢緩存

連接建立成功後,mysql會先查詢緩存,如果之前執行過該sql語句,那麼該語句的歷史執行結果以k-v的形式緩存在內存中,key爲查詢語句,value爲查詢結果,如果緩存命中,則直接返回value給客戶的。如果沒有命中,則執行後續操作,當sql執行完成後,執行結果會被存入查詢緩存中。
由於對於經常更新的數據,每次更新表相關的緩存都會失效,緩存命中率低,緩存時間較短,所以在mysql8.0版本中,直接將查詢緩存的整塊功能刪掉了。

分析器

如果沒有命中緩存,那麼就會進入分析器,分析器將對sql語句進行詞法分析和語法分析,詞法分析將提取關鍵字、表名、字段名、查詢條件等,語法分析是否符合mysql語法。
判斷查詢字段是否在表中存在,sql是否使用了錯誤的關鍵字及順序是否正確,這些都在分析器中進行。

優化器

經過分析器後,mysql得知sql是做什麼操作的,優化器的作用是確定mysql認爲最優的執行計劃,mysql認爲的最優是成本最小並不意味着時間最短。

執行器

mysql通過了分析器知道sql要做什麼,通過優化器知道了sql要怎麼做,執行器階段就是去調用存儲引擎的API接口,返回接口執行結果。

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