2020-01-20MySQL 中的 SQL 是如何執(zhí)行的

MySQL 是典型的 C/S 架構(gòu),即 Client/Server 架構(gòu),服務(wù)器端程序使用的 mysqld。整體的 MySQL 流程如下圖所示:


MySQL 流程圖.png

1.連接層:客戶端和服務(wù)器端建立連接,客戶端發(fā)送 SQL 至服務(wù)器端;
2.SQL 層:對(duì) SQL 語(yǔ)句進(jìn)行查詢處理;
3.存儲(chǔ)引擎層:與數(shù)據(jù)庫(kù)文件打交道,負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取。

sql層結(jié)構(gòu)

sql層結(jié)構(gòu).png

1.查詢緩存:Server 如果在查詢緩存中發(fā)現(xiàn)了這條 SQL 語(yǔ)句,就會(huì)直接將結(jié)果返回給客戶端;如果沒有,就進(jìn)入到解析器階段。需要說(shuō)明的是,因?yàn)椴樵兙彺嫱什桓撸栽?MySQL8.0 之后就拋棄了這個(gè)功能。
2.解析器:在解析器中對(duì) SQL 語(yǔ)句進(jìn)行語(yǔ)法分析、語(yǔ)義分析。
3.優(yōu)化器:在優(yōu)化器中會(huì)確定 SQL 語(yǔ)句的執(zhí)行路徑,比如是根據(jù)全表檢索,還是根據(jù)索引來(lái)檢索等。
4.執(zhí)行器:在執(zhí)行之前需要判斷該用戶是否具備權(quán)限,如果具備權(quán)限就執(zhí)行 SQL 查詢并返回結(jié)果。在 MySQL8.0 以下的版本,如果設(shè)置了查詢緩存,這時(shí)會(huì)將查詢結(jié)果進(jìn)行緩存。

MySQL 的存儲(chǔ)引擎

與 Oracle 不同的是,MySQL 的存儲(chǔ)引擎采用了插件的形式,每個(gè)存儲(chǔ)引擎都面向一種特定的數(shù)據(jù)庫(kù)應(yīng)用環(huán)境。同時(shí)開源的 MySQL 還允許開發(fā)人員設(shè)置自己的存儲(chǔ)引擎,下面是一些常見的存儲(chǔ)引擎:
1.InnoDB 存儲(chǔ)引擎:它是 MySQL 5.5 版本之后默認(rèn)的存儲(chǔ)引擎,最大的特點(diǎn)是支持事務(wù)、行級(jí)鎖定、外鍵約束等。
2.MyISAM 存儲(chǔ)引擎:在 MySQL 5.5 版本之前是默認(rèn)的存儲(chǔ)引擎,不支持事務(wù),也不支持外鍵,最大的特點(diǎn)是速度快,占用資源少。
3.Memory 存儲(chǔ)引擎:使用系統(tǒng)內(nèi)存作為存儲(chǔ)介質(zhì),以便得到更快的響應(yīng)速度。不過(guò)如果 mysqld 進(jìn)程崩潰,則會(huì)導(dǎo)致所有的數(shù)據(jù)丟失,因此我們只有當(dāng)數(shù)據(jù)是臨時(shí)的情況下才使用 Memory 存儲(chǔ)引擎。
4.NDB 存儲(chǔ)引擎:也叫做 NDB Cluster 存儲(chǔ)引擎,主要用于 MySQL Cluster 分布式集群環(huán)境,類似于 Oracle 的 RAC 集群。
5.Archive 存儲(chǔ)引擎:它有很好的壓縮機(jī)制,用于文件歸檔,在請(qǐng)求寫入時(shí)會(huì)進(jìn)行壓縮,所以也經(jīng)常用來(lái)做倉(cāng)庫(kù)。

MySQL 中每個(gè)表的設(shè)計(jì)都可以采用不同的存儲(chǔ)引擎,我們可以根據(jù)實(shí)際的數(shù)據(jù)處理需要來(lái)選擇存儲(chǔ)引擎,這也是 MySQL 的強(qiáng)大之處。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 長(zhǎng)亭外,古道邊,現(xiàn)在的你過(guò)得還好嗎? 三月,是春天的季節(jié),是花兒的家園,它們張開小嘴吸著春天的氣息,互相笑開了顏。...
    璽晴閱讀 480評(píng)論 0 3
  • 喝了點(diǎn)酒 點(diǎn)燃一支煙 房門關(guān)著 煙自由地升成了一條直線 想讓它靠近,熏過(guò)頭發(fā) 明天睡醒,會(huì)留下痕跡 像愛過(guò)的某某 ...
    跟住閱讀 273評(píng)論 0 0
  • 01 上小學(xué)時(shí)很慶幸遇到了一位非常優(yōu)秀的語(yǔ)文老師,她喜歡寫作、摘抄,自然就把這個(gè)習(xí)慣也帶給了我們,所以每個(gè)星期天,...
    笑笑語(yǔ)文老師閱讀 690評(píng)論 0 4
  • June123456閱讀 445評(píng)論 1 1
  • 最近工作清閑,讀了幾本經(jīng)濟(jì)學(xué)家書,有日本中產(chǎn)階級(jí),階級(jí)躍進(jìn),貧困的本質(zhì)等,在今天這個(gè)特殊的日子,我有感而發(fā),不...
    恩能閱讀 234評(píng)論 0 0

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