MySQL 都有哪些零件?
- 聯結器:管理連線,許可權驗證。
- 分析器:詞法分析,語法分析。
- 優化器:執行計劃生成,索引選擇。
- 執行器:操作儲存引擎,返回結果。
- 儲存引擎:儲存資料,提供讀寫介面。
聯結器
第一步,我們會先連線到 MySQL 資料庫,此時就是連線上聯結器。聯結器負責和客戶建立連線,獲取許可權,維持和管理連線。
mysql -h $ip -u root -p
查詢快取
建立好連線之後,我們就可以使用 SELECT 語句了,執行邏輯就會來到第二步:查詢快取。MySQL 會現在查詢快取看看之前是不是執行過這條語句,如果有就直接返回。在 MySQL 8.0 之後,此模組已被移除。
分析器
如果沒有查詢快取,從這裡 MySQL 就要開始分析我們要幹什麼,需要對我們編寫 SQL 語句進行分析。分析器會先做詞法分析,識別出字串以及它代表的含義。然後再進行語法分析,判斷我們編寫的 SQL 語句有沒有錯誤,如果有錯誤就會丟擲錯誤。
優化器
經過了分析器之後,MySQL 知道你要幹什麼了,此時優化器會根據表結構以及語句目的來決定使用哪個方案。
執行器
MySQL 通過分析器知道了我們要做什麼,通過優化器知道了該怎麼做效率最高。於是就可以進入執行器,真正執行 SQL 語句了。
select * from users where name = ‘operator'
假設 users 表中,name 欄位上沒有建立索引,那麼執行器呼叫 InnoDB 引擎介面取第一行,判斷 name 是不是等於 operator,如不是則跳過,如果是就放在結果集中。然後再呼叫引擎介面取下一行,重複相同的邏輯判斷,直到取到這個表的最後一行。最後將結果集返回給客戶端。
本作品採用《CC 協議》,轉載必須註明作者和本文連結