日常咱們看到的只是一條語句執行出來的結果,並不知道中間發生了什麼,今天就來探究一下,MySQL語句的執行過程。mysql
每次使用Mysql會先鏈接到數據庫上面,鏈接器負責跟客戶端進行鏈接sql
mysql -u root -p
而後根據密碼,判斷我登錄進去會有什麼權限,並分配權限給我數據庫
經過 show processlist
能夠查看客戶端鏈接的狀態緩存
當鏈接創建完成以後,MySQL會對所執行的查詢語句進行查詢,有沒有在緩存中,若是有直接返回緩存的查詢結果,不須要執行下一步了。優化
當語句不存在緩存中,經過分析器繼續分析。日誌
不建議使用查詢緩存,由於表的數據的更改都會使緩存失效,適合用查詢緩存的表,好比常常不用更改的數據,還有靜態數據。若是硬要走緩存能夠顯示指定SQL_CACHEcode
select SQL_CACHE * from Student where ID=1;
分析器會將sql語句識別,關鍵字識別,每個單詞表明什麼,而後會根據這些識別可否知足SQL語法,知足不了會提示你哪部分錯誤。好比你一個單詞輸入錯誤,分析器會將錯誤直接提示出來。blog
優化器是用來決定表的索引使用,以及表的鏈接順序等等,來達到最快的速度。索引
當優化完成以後,執行器開始執行SQL語句,當權限不足的時候會提示錯誤。執行器根據表的引擎獲取接口。接口
對數據一行行進行判斷,直到表的最後一行,最後把結果集返回給客戶端。SQL語句到這裏就執行完成了
在Mysql中有一個慢查詢日誌,有一個讀取行的記錄字段rows_examined
,這個就是讀取每行時累加的數據。