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