MySQL查詢select語句的執行流程以及InnoDB記憶體結構

煉啊啊啊發表於2020-11-29

MySQL查詢select語句的執行流程

1.客戶端需要與MySQL服務端建立連線;
2.在快取功能開啟的情況下,查詢快取,如果快取存在相應的結果,直接返回,若不存在,則進入解析器;
3.查詢語句會通過解析器進行詞法解析和語法解析,完成語法解析後會生成解析樹;
4.進入預處理階段,檢查上一步生成的解析樹,解決解析器無法解析的語義,預處理完成後會生成一個新的解析樹;
5.進入查詢優化器,根據解析樹生成不同的執行計劃,而MySQL使用的是基於開銷(cost)的優化器,即哪個執行計劃開銷最小則用哪個執行計劃;
6.執行引擎使用執行計劃操作儲存引擎,一方面將結果返回給客戶端,一方面將結果存放於記憶體/磁碟;

簡略流程圖:
image.png

InnoDB記憶體結構中有什麼?

1.Buffer Pool:記憶體緩衝區,能夠提高讀寫效率。
2.Change Buffer:當資料頁不是唯一索引以及不存在重複資料的情況下,會快取修改記錄,提升更新語句(Insert、Delete、Update)的執行速度。
3.Adaptive Hash Index:InnoDB會監控對錶上各索引頁的查詢,如果觀察該資料被訪問的頻次符合規則,那麼就建立雜湊索引來加快資料訪問的速度。
4.Log Buffer: 用於儲存要寫入磁碟的日誌檔案資料,日誌緩衝區的內容會定期重新整理到磁碟中。如果需要更新、插入、刪除多行資料的事務,則增加日誌緩衝區可以節省磁碟I/O。

InnoDB架構圖:
image.png

 

相關文章