01 一條SQL查詢(xún)語(yǔ)句的執(zhí)行過(guò)程

【極客時(shí)間課程筆記,圖非原創(chuàng)】

MySQL邏輯框架

  1. server層:如圖,所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn),比如存儲(chǔ)過(guò)程、觸發(fā)器、視圖等
  2. 存儲(chǔ)引擎層:負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取。其架構(gòu)模式是插件式的,支持InnoDB、MySIAM、Memory等多個(gè)存儲(chǔ)引擎。最常用的是InnoDB(從5.5.5版開(kāi)始成為默認(rèn))。
MySQL邏輯框架

【長(zhǎng)連接 vs 短連接】

  • 長(zhǎng)連接:連接成功后,如果客戶(hù)端持續(xù)有請(qǐng)求,則一直使用同一個(gè)連接
  • 短連接:每次執(zhí)行完很少的幾次查詢(xún)就斷開(kāi)連接,下次查詢(xún)?cè)俳⒁粋€(gè)

【tips】

  • 建立連接的過(guò)程比較復(fù)雜,建議減少建立連接的動(dòng)作。
  • 但是使用長(zhǎng)連接占內(nèi)存很快,因?yàn)閙ysql再執(zhí)行過(guò)程中臨時(shí)使用的內(nèi)存是管理再連接對(duì)象里的,這些資源在斷開(kāi)連接的時(shí)候才釋放。解決辦法:(1)定期斷開(kāi)長(zhǎng)連接;(2)mysql5.7版本支持mysql_reset_connection來(lái)重新初始化連接資源

分析器

詞法分析 - > 語(yǔ)法分析

優(yōu)化器

表里有多個(gè)索引的時(shí)候,決定用哪個(gè)索引;或者一個(gè)語(yǔ)句有多表關(guān)聯(lián)(join)的時(shí)候,決定各個(gè)表的連接順序

執(zhí)行器

MySQL通過(guò)分析器知道了你要做什么,通過(guò)優(yōu)化器知道了該怎么做,于是進(jìn)入執(zhí)行器執(zhí)行。

select * from T where ID=10;
  1. 首先判斷對(duì)表T有沒(méi)有執(zhí)行權(quán)限,如果有進(jìn)入2
  2. 調(diào)用InnoDB引擎接口取表的第一行,判斷condition,如果是則存入結(jié)果集,不是就跳過(guò)。-> step 3;
  3. 調(diào)用引擎接口取“下一行”,重復(fù)condition判斷,直到取到最后一行;
  4. 結(jié)果集返回給客戶(hù)端
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容