01|基礎架構:一條查詢語句的執行流程
1. 基本架構
大體來說,MySQL可以分為Server層和存儲引擎兩部分。
Server層包括鏈接器,分析器,優化器,執行器等,涵蓋大多數核心服務功能,一般跨存儲引擎的功能都在這一層實現,比如存儲過程,觸發器,視圖等。
存儲引擎負責數據的存儲和提取。其架構模式是插件式,支持InnoDB,MyISAM,Memory等存儲引擎,MySQL5.5.5版本後默認引擎為InnoDB。
1.1 連接器
負責和客戶端建立連接,獲取權限,維持和管理連接。
常用命令:mysql -h127.0.0.1 -P3306 -uroot -p123456
連接認證通過後,連接器在權限表中查詢你擁有的權限,之後這個連接的權限邏輯判斷都依賴此時讀到的權限。
可以通過 show processlist查看當前所有連接的狀態;
連接完成後如果沒有其他操作,將處於空閑狀態,空閑狀態的連接存在時間有一定限制。由參數wait_timeout控制,默認8小時。
關於連接的優化:
1. 定期斷開連接。使用一段時間或者執行過一個占用內存的大查詢之後主動斷開連接;
2. 在5.7版本後,可通過執行 mysql_reset_connection 重新初始化連接;
1.2 查詢緩存
執行查詢語句時,先在緩存中查詢,緩存命中失敗後再去數據庫查詢;
一般以查詢語句為 key, 查詢的結果集為 value ,以鍵值對的形式將查詢結果緩存在內存中。
優點:查詢緩存命中率較高時,可以大幅提高查詢效率;
缺點:一般情況下緩存失效的情況較多,一旦對某個表進行更新,這個表的所有查詢緩存會被清空;
8.0 版本已經不支持查詢緩存功能。
1.3 分析器
根據語法規則判斷SQL語句是否滿足SQL語法,判斷表是否存在,列是否存在等等;
1.4 優化器
根據索引或其他規則,優化SQL語句,可能更改SQL語句的執行順序,但是不會影響查詢結果;
1.5 執行器
執行SQL語句之前,進行權限校驗,然後進行操作;
01|基礎架構:一條查詢語句的執行流程