流程圖
- 連接器:建立連接,管理連接、校驗用戶身份;
- 查詢緩存:查詢語句如果命中查詢緩存則直接返回,否則繼續往下執行。MySQL 8.0 已刪除該模塊;
- 解析 SQL,通過解析器對 SQL 查詢語句進行詞法分析、語法分析(判斷語法格式是否正確),然后構建語法樹,方便后續模塊讀取表名、字段、語句類型;
- 預處理階段:檢查表或字段是否存在(對于 MySQL 5.7 判斷表或字段是否存在的工作,是在詞法分析&語法分析之后,prepare 階段之前做的,MySQL 8.0 開始在預處理階段判斷);將 select * 中的 * 符號擴展為表上的所有列。
- 優化階段:基于查詢成本的考慮, 選擇查詢成本最小的執行計劃(比如在表里面有多個索引的時候,優化器會基于查詢成本的考慮,來決定選擇使用哪個索引);
- 執行階段:根據執行計劃執行 SQL 查詢語句,從存儲引擎讀取記錄,返回給客戶端;