一條 SQL 查詢語句是如何執行的?

\[image:54F48F77-ED36-427B-B12B-4CEE05673D8A-1161-00035BD59A6C27BB/0d2070e8f84c4801adbfa03bda1f98d9.png\]

MySQL 都有哪些零件?

  1. 鏈接器:管理鏈接,權限驗證。
  2. 分析器:詞法分析,語法分析。
  3. 優化器:執行計劃生成,索引選擇。
  4. 執行器:操做存儲引擎,返回結果。
  5. 存儲引擎:存儲數據,提供讀寫接口。

鏈接器

第一步,咱們會先鏈接到 MySQL 數據庫,此時就是鏈接上鍊接器。鏈接器負責和客戶創建鏈接,獲取權限,維持和管理鏈接。mysql

mysql -h $ip -u root -p
複製代碼

查詢緩存

創建好鏈接以後,咱們就可使用 SELECT 語句了,執行邏輯就會來到第二步:查詢緩存。MySQL 會如今查詢緩存看看以前是否是執行過這條語句,若是有就直接返回。在 MySQL 8.0 以後,此模塊已被移除。sql

分析器

若是沒有查詢緩存,從這裏 MySQL 就要開始分析咱們要幹什麼,須要對咱們編寫 SQL 語句進行分析。分析器會先作詞法分析,識別出字符串以及它表明的含義。而後再進行語法分析,判斷咱們編寫的 SQL 語句有沒有錯誤,若是有錯誤就會拋出錯誤。數據庫

優化器

通過了分析器以後,MySQL 知道你要幹什麼了,此時優化器會根據表結構以及語句目的來決定使用哪一個方案。緩存

執行器

MySQL 經過分析器知道了咱們要作什麼,經過優化器知道了該怎麼作效率最高。因而就能夠進入執行器,真正執行 SQL 語句了。bash

select * from users where name = ‘operator' 複製代碼

假設 users 表中,name 字段上沒有創建索引,那麼執行器調用 InnoDB 引擎接口取第一行,判斷 name 是否是等於 operator,如不是則跳過,若是是就放在結果集中。而後再調用引擎接口取下一行,重複相同的邏輯判斷,直到取到這個表的最後一行。最後將結果集返回給客戶端。優化

相關文章
相關標籤/搜索