一條SQL查詢語句是如何執行的?&&閱讀筆記

閱讀完文章後,自己的一些小記錄。原文

Mysql基本架構圖

MySQL的邏輯架構圖
MySQL大體上可分爲Server層存儲引擎層

Server層包括:

  • 連接器
  • 查詢緩存
  • 分析器
  • 優化器
  • 執行器
  • 其他內置函數如日期、時間、數學和加密函數等

所有跨存儲引擎的功能都在這一層實現,如存儲過程、觸發器、視圖等

存儲引擎層負責數據的存儲和提取,插件式架構模式,支持InnoDB、MyISAM、Memory等多個存儲引擎。默認是MyISAM,從MySQL 5.5.5版本InnoDB開始成爲了默認存儲引擎。

連接器

連接到數據庫的第一道關卡,負責跟客戶端建立連接、獲取權限、維持和管理連接。
建立連接的過程比較複雜,儘量減少建立連接動作,使用長連接
但是如果大量長連接累積下來,可能導致內存佔用太大,導致MySQL異常重啓。
解決方案:

  • 定期斷開長連接。使用一段時間,或者程序裏面判斷執行過一個佔用內存的大查詢後,斷開連接,之後要查詢再重連。
  • 如果是MySQL 5.7或更新版本,可以在每次執行一個比較大的操作後,通過執行 mysql_reset_connection來重新初始化連接資源。這個過程不需要重連和重新做權限驗證,但是會將連接恢復到剛剛創建完時的狀態。

查詢緩存

每當拿到一個請求,會先到緩存裏面去看看,之前是不是執行過,之前執行過的語句及其結果可能會以key-value對的形式,被直接緩存在內存中。

如果命中,就返回結果;如果沒有,就接着走下面的流程。

但是實際上緩存十分雞肋,我們現實的業務肯定是改>讀,每當數據變動,緩存就會失效,需要重新獲取,如果改的頻繁,緩存都還沒用,直接被做掉了,那還不如別用。緩存還是適用於讀頻繁比較香。

所以,MySQL 8.0版本直接將查詢緩存的整塊功能做掉了。

分析器

分析器首先會做詞法分析,MySQL需要識別你SQL語句每個“單詞”代表什麼,識別完之後,就進行語法分析,判斷語句是否滿足MySQL語法

優化器

優化器主要是MySQL來選擇其認爲最優的執行方案,比如如何去選擇索引。該步驟後,如何去執行該語句就定下來了。

執行器

開始執行時,會先判斷”你“是否擁有這張表相應的權限。
有權限的話,執行器就會根據表的引擎定義,去使用這個引擎提供的接口,返回接口執行的結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章