{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

程序員經(jīng)典面試題,Mysql是如何完成一次數(shù)據(jù)查詢的?

CKJOKERCKJOKER 回答0 收藏1
收藏問題

1條回答

seal_de

seal_de

回答于2022-06-28 14:20

MySQL是如何完成一次數(shù)據(jù)查詢的?這是一個很經(jīng)典的問題,對于理解數(shù)據(jù)庫執(zhí)行過程是個不錯的開端。

MySQL執(zhí)行一條select的過程大致概述如下

  • 建立連接
  • 客戶端發(fā)起select語句,mysql接收
  • 判斷查詢語句是否存在于緩存中
  • 分析器做語法分析和檢驗
  • 優(yōu)化器優(yōu)化語句
  • 執(zhí)行器執(zhí)行查詢,并保存到緩存中

具體執(zhí)行過程

  1. 首先客戶端通過TCP發(fā)送連接請求到mysql連接器,連接器會對該請求進行權(quán)限驗證及連接資源分配。
  2. 建立連接后,客戶端發(fā)送一條select語句,MySQL收到該語句后,通過命令分發(fā)器判斷其是否是一條select語句。MySQL在開啟查詢緩存的情況下,會先在查詢緩存中查找該SQL是否完全匹配,如果完全匹配,驗證當前用戶是否具備查詢權(quán)限,如果權(quán)限驗證通過,直接返回結(jié)果集給客戶端,該查詢也就完成了。如果不匹配繼續(xù)向下執(zhí)行。
  3. 如果在查詢緩存中未匹配成功,則將語句交給分析器作語法分析。MySQL通過分析語法知道要查的內(nèi)容。這步會對語法進行檢驗,如果語法不對就會返回語法錯誤中斷查詢。
  4. 分析器的工作完成后,將語句傳遞給預處理器,檢查數(shù)據(jù)表和數(shù)據(jù)列是否存在,解析別名看是否存在歧義等
  5. 語句解析完成后,MySQL就知道要查的內(nèi)容了,之后會將語句傳遞給優(yōu)化器進行優(yōu)化(通過索引選擇最快的查找方式),并生成執(zhí)行計劃。
  6. 最后,交給執(zhí)行器去具體執(zhí)行該查詢語句。執(zhí)行器開始執(zhí)行后,會逐漸將數(shù)據(jù)保存到結(jié)果集中,同時會逐步將數(shù)據(jù)緩存到查詢緩存中,最終將結(jié)果集返回給客戶端。

以下是一張MySQL結(jié)構(gòu)圖,結(jié)合圖有助于理解,希望回答對您有所幫助。

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<