1. 程式人生 > >01|基礎架構:一條查詢語句的執行流程

01|基礎架構:一條查詢語句的執行流程

cti 版本 innodb 語句 -h 分析 查看 執行器 架構模式

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|基礎架構:一條查詢語句的執行流程