MySQL 架構設計

作者:Colors
鏈接:https://juejin.cn/post/6954532217615810596

爲何稱 MySQL 爲黑盒?

對於大部分的開發人員而言,編寫增刪查改的 sql 語句通過數據庫連接去操作數據庫,但並不關心數據庫是如何監聽請求和從連接中把請求數據中提取出來,往往在意表結構,sql 執行效率慢就給他們建立索引,完全把 MySQL 當作黑盒子去使用。

1. 網絡連接必須使用線程來處理

MySQL 使用內部線程來實現監聽和讀取請求。

2. SQL 接口:負責處理接收到的 sql 語句

MySQL 通過 sql 接口把我們平時編寫的 sql 語句簡單化,讓我們輕鬆的學會和編寫 sql 語句,但其底層實現其實是非常複雜。當工作線程接收到 sql 語句之後,會交給 sql 接口去執行。

3. 查詢解釋器:讓 MySQL 看懂 sql 語句

MySQL 是一個數據管理系統,並不能像我們一樣直接讀懂 sql 語句,例如:

select id, name, age from users where id = 1

需要藉助組件 查詢解析器 對 sql 語句進行解析和拆解,拆解成以下幾部分:

  1. from users: 我們需要從 users 表裏面查詢數據

  2. where id = 1 :查詢 id 字段值爲 1 的那行數據

  3. select id, name, age : 從查出來的那行數據中提取出 "id,name,age" 三個字段

4. 查詢優化器:選擇最優的查詢路徑

查詢優化器會根據 sql 生成查詢路徑樹,然後從裏面選擇一條最優的查詢路徑出來。

5. 調用存儲引擎接口,真正執行 sql 語句

數據庫存儲的數據,有可能存儲在磁盤上,有可能存儲在內存中。那怎麼判別查詢的數據存放在哪一個地方?存儲引擎根據執行器的調度執行 sql 邏輯,無論是從內存緩存中查詢數據,從磁盤中更新數據,一系列操作全都由存儲引擎執行。

6. 執行器:根據執行計劃調度存儲引擎

執行器根據優化器的執行計劃去調用存儲引擎的各種接口來完成 sql 語句的執行。

總結:

在 MySQL 架構設計中,SQL 接口、SQL 解析器、查詢優化器、執行器都是一套通用的組件,但是存儲引擎卻有不同的選擇,例如:InnoDB、MyISAM、Memory 等,對應不同的應用場景,MySQL 的默認是 InnoDB,在後續會一步一步分析。所以綜上所述,MySQL 的執行 sql 語句的順序爲:sql 接口 -> 解析器:解釋 sql-> 優化器:生成執行計劃 -> 執行器:執行計劃去調用 InnoDB 存儲引擎接口執行 sql

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/4hl97mXqO9A9MIlsRPUeYQ