mysql的sql語句執行流程

lusklusklusk發表於2018-12-03

1、client和server建立連線,client傳送sql至server(對應聯結器這一過程)

2、server如果在查詢快取中發現了該sql,則直接使用查詢快取的結果返回給client,如果查詢快取中沒有,則進入下面的步驟(對應查詢快取這一過程,8.0這一過程已經不存在了,8.0完全拋棄了這個功能)

3、server對sql進行語法分析,識別出sql裡面的字串是否符合標準,比如select關鍵字不能寫錯(對應分析器這一過程)

4、server對sql進行語義分析,識別出sql裡面的字串的具體意思是什麼,比如T1是表名,C1是列名(對應分析器這一過程。3、4步其實解析的過程,這個解析的過程是分析器的工作不是最佳化器的工作)

5、server確定sql的執行路徑,比如走索引還是全表,多表連線時哪張表先走哪張表後走,當你的where條件的可讀性和效率有衝突時mysql內部還會自動進行最佳化,也就是大家理解的重寫where子句(對應最佳化器這一過程)

6、server對執行sql的使用者進行許可權檢查,比如對錶是否有許可權執行(對應執行器這一過程)

7、server執行該sql語句,傳送結果給client(對應執行器這一過程)


聯結器-->查詢快取-->分析器-->最佳化器-->執行器



如果表 T1 中沒有欄位 C1,而執行select * from T1 where C1=1會報錯不存在C1這個列,這個過程對應上面第4個過程,對應分析器這一過程


如果使用者對T1表沒有許可權,而執行select * from T1 where C1=1會報錯對錶T1沒有許可權,這個過程對應上面第6個過程,對應執行器這一過程

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2222570/,如需轉載,請註明出處,否則將追究法律責任。

相關文章