mysql查詢結果再查詢,Mysql是如何完成一次數據查詢的?
MySQL是如何完成一次數據查詢的?這是一個很經典的問題,對于理解數據庫執行過程是個不錯的開端。
MySQL執行一條select的過程大致概述如下建立連接客戶端發起select語句,mysql接收判斷查詢語句是否存在于緩存中分析器做語法分析和檢驗優化器優化語句執行器執行查詢,并保存到緩存中具體執行過程首先客戶端通過TCP發送連接請求到mysql連接器,連接器會對該請求進行權限驗證及連接資源分配。建立連接后,客戶端發送一條select語句,MySQL收到該語句后,通過命令分發器判斷其是否是一條select語句。MySQL在開啟查詢緩存的情況下,會先在查詢緩存中查找該SQL是否完全匹配,如果完全匹配,驗證當前用戶是否具備查詢權限,如果權限驗證通過,直接返回結果集給客戶端,該查詢也就完成了。如果不匹配繼續向下執行。如果在查詢緩存中未匹配成功,則將語句交給分析器作語法分析。MySQL通過分析語法知道要查的內容。這步會對語法進行檢驗,如果語法不對就會返回語法錯誤中斷查詢。分析器的工作完成后,將語句傳遞給預處理器,檢查數據表和數據列是否存在,解析別名看是否存在歧義等語句解析完成后,MySQL就知道要查的內容了,之后會將語句傳遞給優化器進行優化(通過索引選擇最快的查找方式),并生成執行計劃。最后,交給執行器去具體執行該查詢語句。執行器開始執行后,會逐漸將數據保存到結果集中,同時會逐步將數據緩存到查詢緩存中,最終將結果集返回給客戶端。以下是一張MySQL結構圖,結合圖有助于理解,希望回答對您有所幫助。