MySQL性能優化學習(一)—— MySQL的執行流程

一、一條sql的執行過程

APP(客戶端)

↓↓

查詢緩存

可以提高效率,但sql不完全一樣時即失效。表內容變化時也失效。因此最好還是ORM框架去實現。

MYSQL的查詢緩存默認關閉,8.0的版本以後已經去除該緩存模塊。

↓↓

解析器

對sql進行詞法解析,語法解析。判斷是否正確

↓↓

預處理器

檢查表是否存在,列是否存在

↓↓

查詢優化器

執行前對sql進行優化,生成執行計劃

查詢優化器追蹤:

↓↓

查詢執行引擎

由其獲得執行計劃去操作存儲引擎

↓↓

存儲引擎

數據存放在什麼結構裏,由存儲引擎決定。

每個表都可以有不同的存儲引擎。

查看錶的存儲引擎: show table status from `tablename`;

 

執行流程整體圖:

 

二、存儲引擎

5.5版本以前默認MyISAM,之後默認InnoDB

MyISAM只支持表級別的鎖,插入和查詢的操作效率高,不支持事物,不支持外鍵。

InnoDB支持事物和外鍵,支持行鎖,因此數據完整性較高。數據一致性要求高,比較多更新操作適用,

Memory數據存放在內存中,讀寫數據快,如果需要臨時存儲數據適用。

CSV表體積較小,適用於遷移,不支持索引。

 

InnoDB的結構


BufferPoor:寫入磁盤前先走BP,提升讀寫效率

RedoLog:先寫日誌,再把數據從內存同步到磁盤中

                 僅在InnoDB中實現,可用於崩潰恢復

UndoLog:innodb實現事物原子性和回滾操作的日誌文件

binlog:server層的邏輯日誌各存儲引擎都能使用。用來做主從,做數據恢復。

 

三、一條更新語句的執行流程

 

發佈了14 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章