Mysql查詢語句的執行流程

2022-05-10 13:06:18 字數 1916 閱讀 9766

我們先看一下mysql的基本架構示意圖:

大體來說,mysql 可以分為server 層儲存引擎層兩部分。

server 層包括聯結器、查詢快取、分析器、優化器、執行器等,涵蓋 mysql 的大多數核

心服務功能,以及所有的內建函式(如日期、時間、數學和加密函式等),所有跨儲存引

擎的功能都在這一層實現,比如儲存過程、觸發器、檢視等。

而儲存引擎層負責資料的儲存和提取。其架構模式是外掛程式式的,支援 innodb、

myisam、memory 等多個儲存引擎。現在最常用的儲存引擎是 innodb,它從 mysql

5.5.5 版本開始成為了預設儲存引擎。

現在我們來詳細看一下查詢sql的執行流程:

聯結器

第一步,你會先連線到這個資料庫上,這時候接待你的就是聯結器。聯結器負責跟客戶端

建立連線、獲取許可權、維持和管理連線。

如果使用者名稱或密碼不對,你就會收到乙個"access denied for user"的錯誤,然後客戶

端程式結束執行。

如果使用者名稱密碼認證通過,聯結器會到許可權表裡面查出你擁有的許可權。之後,這個連線

裡面的許可權判斷邏輯,都將依賴於此時讀到的許可權。

查詢快取

連線建立完成後,你就可以執行 select 語句了。

執行邏輯就會來到第二步:查詢快取。

mysql 拿到乙個查詢請求後,會先到查詢快取看看,之前是不是執行過這條語句。

但是大多數情況下我會建議你不要使用查詢快取,為什麼呢?因為查詢快取往往弊大於

利。查詢快取的失效非常頻繁,只要有對乙個表的更新,這個表上所有的查詢快取都會被清

空。需要注意的是,mysql 8.0 版本直接將查詢快取的整塊功能刪掉了,也就是說 8.0 開始徹

底沒有這個功能了。

分析器

如果沒有命中查詢快取,就要開始真正執行語句了。首先,mysql 需要知道你要做什

麼,因此需要對 sql 語句做解析。

分析器先會做「詞法分析」。你輸入的是由多個字串和空格組成的一條 sql 語句,

mysql 需要識別出裡面的字串分別是什麼,代表什麼。

做完了這些識別以後,就要做「語法分析」。根據詞法分析的結果,語法分析器會根據語

法規則,判斷你輸入的這個 sql 語句是否滿足 mysql 語法。

優化器

經過了分析器,mysql 就知道你要做什麼了。在開始執行之前,還要先經過優化器的處

理。優化器是在表裡面有多個索引的時候,決定使用哪個索引;或者在乙個語句有多表關聯

(join)的時候,決定各個表的連線順序。

執行器

mysql 通過分析器知道了你要做什麼,通過優化器知道了該怎麼做,於是就進入了執行

器階段,開始執行語句。

開始執行的時候,要先判斷一下你對這個表 t 有沒有執行查詢的許可權,如果沒有,就會返回沒有許可權的錯誤,

如果有許可權,就開啟表繼續執行。開啟表的時候,執行器就會根據表的引擎定義,去使用

這個引擎提供的介面。

比如我們這個例子中的表 t 中,id 字段沒有索引,那麼執行器的執行流程是這樣的:

1. 呼叫 innodb 引擎介面取這個表的第一行,判斷 id 值是不是 10,如果不是則跳過,如

果是則將這行存在結果集中;

2. 呼叫引擎介面取「下一行」,重複相同的判斷邏輯,直到取到這個表的最後一行。

3. 執行器將上述遍歷過程中所有滿足條件的行組成的記錄集作為結果集返回給客戶端。

至此,這個語句就執行完成了。

Mysql查詢語句執行流程

第一步 聯結器 首先我們要連線上這個資料庫,聯結器負責建立連線,判斷認證是否通過等。第二部 查詢快取 mysql拿到請求後首先判斷請求的查詢語句是否有快取,是否命中快取,但是不推薦使用mysql的快取,官方也不推薦,因為只要有一條資料更新表的快取就會被刪除,降低效率 第三步 第四步 優化器 優化sq...

MySQL DML執行流程揭秘 查詢語句執行流程

查詢中join group by的優化 order by工作原理 count id count count cel 你真的懂嗎 問題分析總結 一 條s ql查詢 語句怎麼 執行的 color 一條sql查 詢語句怎 麼執行的 儲存引擎 select city,name,age,from studen...

mysql語句過程及執行流程

1.使用者在發出sql命令之後,mysql的執行緒管理器會建立或者重用乙個執行緒,建立client到mysql伺服器的連線。mysql會根據使用者名稱和使用者ip 或主機名 在mysql.user表中檢視是否有記錄,是否允許連線。2.使用者認證完成之後,會進入commanderdispatcher模...