下面是MySQL 的基本架構示意圖:
server層:
連接配接器:
建立連接配接,假設你用管理者賬号對這個使用者的權限做了修改,也不會影響已經存在連接配接的權限,隻有再建立的連接配接才會使用新的權限設定。
查詢緩存:
MySQL 拿到一個查詢請求後,會先到查詢緩存看看,之前是不是執行過這條語句。大多數情況下我會建議你不要使用查詢緩存。為什麼呢?後面講。
分析器:
對SQL進行文法分析和詞法分析。
優化器:
在表裡面有多個索引的時候,決定使用哪個索引;或者在一個語句有多表關聯時,決定各個表的連接配接順序。
執行器:
檢查有沒有執行查詢的權限,如果沒有,就會傳回沒有權限的錯誤,如果有,就繼續執行。
存儲引擎層:
負責資料的存儲和提取。
為什麼不建議開啟查詢緩存呢?
因為查詢緩存往往弊大于利。隻要有對一個表的更新,這個表上所有的查詢緩存都會被清空,查詢緩存的失效非常頻繁。是以很可能你還沒使用呢,就被一個更新全清空了。對于更新壓力大的資料庫來說,查詢緩存的命中率會非常低。除非你的業務就是有一張靜态表,很長時間才會更新一次。比如,一個系統配置表,那這張表上的查詢才适合使用查詢緩存。 MySQL 8.0 版本直接将查詢緩存的整塊功能删掉了,也就是說 8.0 開始徹底沒有這個功能了。