{eval=Array;=+count(Array);}
1、客戶端發(fā)送一條查詢給服務器;然后客戶端能做的就只是等待服務端的結果。
2、服務端收到查詢后先檢查查詢緩存,如果剛好命中了緩存那么OK直接從緩存里拿出結果給客戶端。如果沒有那么就進入下一階段。
3、服務器段解析SQL語句并進行一定的預處理,然后在優(yōu)化器生成對應的執(zhí)行計劃(優(yōu)化器的功能是找出最佳的執(zhí)行計劃);如果在這個過程中遇到任何錯誤都可能停止此次查詢。
4、mysql根據(jù)優(yōu)化器生成的最佳執(zhí)行計劃,通過存儲引擎的API來執(zhí)行查詢,返回查詢結果。
5、mysql將結果返回給客戶端。
實際上mysql執(zhí)行的每一步都比較復雜,此處僅就流程簡要描述。
MySQL執(zhí)行SQL的流程大概這樣子的:
1. 連接器,這個步驟是和客戶端建立連接
2. 分析器,解析SQL語句,這一步如果SQL語句寫的不對就會報錯了
3. 優(yōu)化器,這個步驟主要是選擇索引的,MySQL會選擇認為最優(yōu)的索引,實際上可能不是最優(yōu)的
4. 執(zhí)行器,這個步驟主要是根據(jù)表的定義,調(diào)用具體的存儲引擎執(zhí)行SQL,現(xiàn)在默認引擎是innodb。還有就是記錄binlog日志。
這里省略了查詢緩存的步驟,這個步驟在連接器之后,不過一般都是關閉緩存的。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答