輸入一條語句,返回一個結果,那這條語句在 MySQL 在SQL中如何執行呢?
MySQL 的基本架構示意圖(copy):
image.png
第一步,連接器
你會先連接到這個數據庫上,這時候接待你的就是連接器。
mysql -h$ip -P$port -u$user -p
連接完成后,如果你沒有后續的動作,這個連接就處于空閑狀態,你可以在 show processlist 命令中看到它。
第二步,查詢緩存
連接建立完成后,你就可以執行 select 語句了。MySQL 拿到一個查詢請求后,會先到查詢緩存看看,之前是不是執行過這條語句。之前執行過的語句及其結果可能會以 key-value 對的形式,被直接緩存在內存中。
第三步,分析器
如果沒有命中查詢緩存,就要開始真正執行語句了。首先,MySQL需要知道你要做什么,因此需要對 SQL 語句做解析。分析器先會做“詞法分析”。你輸入的是由多個字符串和空格組成的一條 SQL 語句,MySQL 需要識別出里面的字符串分別是什么,代表什么。
第四步,優化器
經過了分析器,MySQL 就知道你要做什么了。在開始執行之前還要先經過優化器的處理。
優化器是在表里面有多個索引的時候,決定使用哪個索引;或者在一個語句有多表關聯(join)的時候,決定各個表的連接順序。
第五步,執行器
MySQL 通過分析器知道了你要做什么,通過優化器知道了該怎么做,于是就進入了執行器階段,開始執行語句。
開始執行的時候,要先判斷一下你對這個表 T 有沒有執行查詢的權限,如果沒有,就會返回沒有權限的錯誤。如果有權限,就打開表繼續執行。打開表的時候,執行器就會根據表的引擎定義,去使用這個引擎提供的接口。