一條查詢SQL查詢語句的執行原理
阿新 • • 發佈:2021-06-18
先熟悉一下淺而易懂SQL執行的流程圖SQL查詢過程七步曲
1.查詢SQL傳送請求
客戶端將查詢sql按照mysql通訊協議傳輸到服務端。服務端接受到請求後,服務端單起一個執行緒執行sql
2.判斷是否為select查詢語句
執行前mysql會通過命令分發器判斷其是否是一條select語句(判斷sql語句前6個字元是否為select);
3.查詢快取先行
MySQL在開啟查詢快取的情況下,首先會先在查詢快取中查詢該SQL是否完全匹配,如果完全匹配,驗證當前使用者是否具備查詢許可權,如果許可權驗證通過,直接返回結果集給客戶端,該查詢也就完成了。如果不匹配繼續向下執行。
4.語法分析之分析器
如果在查詢快取中未匹配成功,則將語句交給分析器作語法分析。MySQL通過分析語法知道要查的內容。這步會對語法進行檢驗,如果語法不對就會返回語法錯誤中斷查詢。如果語法不正確
You have an error in your SQL syntax
5.查詢之前處理器
(1)分析器的工作完成後,將語句傳遞給前處理器,檢查資料表和資料列是否存在,解析別名看是否存在歧義如果錯誤返回
Unknown column xxx in ‘where clause’
(2)sql是否有該表的的操作許可權;如果錯誤
ERROR 1142 (42000): SELECT command denied to user 'root'@'localhost' for table 'xxx'
6.查詢之優化器
語句解析完成後,MySQL就知道要查的內容了,之後會將語句傳遞給優化器進行優化(通過索引選擇最快的查詢方式),並生成執行計劃。
7.查詢之執行器
最後,交給執行器去具體執行該查詢語句。執行器開始執行後,會逐漸將資料儲存到結果集中,同時會逐步將資料快取到查詢快取中,最終將結果集返回給客戶端。