MySQL語句執行過程

日常咱們看到的只是一條語句執行出來的結果,並不知道中間發生了什麼,今天就來探究一下,MySQL語句的執行過程。mysql

1.鏈接器

每次使用Mysql會先鏈接到數據庫上面,鏈接器負責跟客戶端進行鏈接sql

mysql -u root -p

而後根據密碼,判斷我登錄進去會有什麼權限,並分配權限給我數據庫

經過 show processlist能夠查看客戶端鏈接的狀態緩存

image-20210223192355031

2.查詢緩存

當鏈接創建完成以後,MySQL會對所執行的查詢語句進行查詢,有沒有在緩存中,若是有直接返回緩存的查詢結果,不須要執行下一步了。優化

當語句不存在緩存中,經過分析器繼續分析。日誌

不建議使用查詢緩存,由於表的數據的更改都會使緩存失效,適合用查詢緩存的表,好比常常不用更改的數據,還有靜態數據。若是硬要走緩存能夠顯示指定SQL_CACHEcode

select SQL_CACHE * from Student where ID=1;

3.分析器

分析器會將sql語句識別,關鍵字識別,每個單詞表明什麼,而後會根據這些識別可否知足SQL語法,知足不了會提示你哪部分錯誤。好比你一個單詞輸入錯誤,分析器會將錯誤直接提示出來。blog

4.優化器

優化器是用來決定表的索引使用,以及表的鏈接順序等等,來達到最快的速度。索引

5.執行器

當優化完成以後,執行器開始執行SQL語句,當權限不足的時候會提示錯誤。執行器根據表的引擎獲取接口。接口

對數據一行行進行判斷,直到表的最後一行,最後把結果集返回給客戶端。SQL語句到這裏就執行完成了

在Mysql中有一個慢查詢日誌,有一個讀取行的記錄字段rows_examined ,這個就是讀取每行時累加的數據。

相關文章
相關標籤/搜索