
先看看一條SQL如何入庫(kù)的
應(yīng)用服務(wù)器與MySQL建立連接通過(guò)連接發(fā)送一條SQL語(yǔ)句(update student set score=100 where score=50)SQL依次經(jīng)過(guò)Server層的[分析器][優(yōu)化器][執(zhí)行器][執(zhí)行器]根據(jù)[執(zhí)行計(jì)劃]操作執(zhí)行引擎(InnoDB Engine)InnoDB Engine從[磁盤]數(shù)據(jù)文件中將score=50讀取到內(nèi)存[BufferPool]中在修改之前,寫入一條[undo log]將修改之前的值score=50保存起來(lái)先將緩存池[BufferPool]中score=50更新為score=100寫入一條[redo log]將修改后的score=100存起來(lái),用于異常場(chǎng)景的事務(wù)[提交]寫入一條[bin log]將修改后的score=100存起來(lái)后臺(tái)IO線程將緩存池被修改的值score=100刷入磁盤這是一條非常簡(jiǎn)單的SQL語(yǔ)句[update student set score=100 where score=50],從MySQL服務(wù)端接收SQL到寫入磁盤,經(jīng)過(guò)了Server層和InnoDB存儲(chǔ)引擎,中間摻雜著磁盤讀取、日志記錄、內(nèi)存更新、寫入磁盤。
MySQL為什么將Server層和引擎層拆分?
- 由MySQL架構(gòu)演變而來(lái),進(jìn)而實(shí)現(xiàn)「解耦」的效果
- 針對(duì)不同的場(chǎng)景,使用不同的存儲(chǔ)引擎,靈活性更強(qiáng)
- MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件中,每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平并最終提供不同的功能和能力
MySQL主要包含2種存儲(chǔ)引擎
- MyISAM(不支持事務(wù),訪問(wèn)速度快)
- InnoDB(主流,支持事務(wù))
鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。