網(wǎng)站做淘寶推廣收入seo哪家強(qiáng)
文章地址
https://blog.csdn.net/qq_43618881/article/details/118657040
連接器
請(qǐng)求先走到連接器,與客戶端建立連接、獲取權(quán)限、維持和管理連接
mysql緩存池
如果要查找的數(shù)據(jù)直接在mysql緩存池里面就直接返回?cái)?shù)據(jù)
分析器
請(qǐng)求已經(jīng)建立了連接,現(xiàn)在需要對(duì)請(qǐng)求的語法進(jìn)行分析,生成一個(gè)語法樹
如果語法不對(duì)在這里直接報(bào)錯(cuò)
優(yōu)化器
在這里對(duì)你寫的sql進(jìn)行優(yōu)化
比如說表連接查詢的時(shí)候小表 left join 大表
最后生成執(zhí)行計(jì)劃
也就是explain出來的結(jié)果
執(zhí)行器
隨后將執(zhí)行計(jì)劃交給執(zhí)行引擎進(jìn)行操作,比如innodb存儲(chǔ)引擎,mysql的存儲(chǔ)引擎支持插件化
執(zhí)行引擎
INNODB存儲(chǔ)引擎,會(huì)對(duì)執(zhí)行計(jì)劃進(jìn)行處理
INNODB緩存池
在INNODB里面也有緩存池,里面會(huì)有各種各樣的臟頁
INNODB流程
select
首先查看數(shù)據(jù)是否在緩存池當(dāng)中,如果是的話直接對(duì)數(shù)據(jù)進(jìn)行返回
如果不在緩存池當(dāng)中從磁盤讀取root 的下面的非聚簇索引頁,根據(jù)slot,進(jìn)行二分查找,最后按照偏移量找到對(duì)應(yīng)的頁表,如果下一個(gè)節(jié)點(diǎn)還是非聚簇節(jié)點(diǎn),就重復(fù)這個(gè)步驟,如果不是非聚簇節(jié)點(diǎn),就查找真正的數(shù)據(jù)
slot槽
slot槽在頁頭中,每個(gè)頁都是有的
slot 記錄了每一個(gè)頁的偏移量,是一個(gè)數(shù)組的結(jié)構(gòu),可以支持二分查找
先從 B+Tree 的根開始,逐層檢索,直到找到葉子節(jié)點(diǎn),也就是找到對(duì)應(yīng)的數(shù)據(jù)頁為止,然后將數(shù)據(jù)頁加載到內(nèi)存中,頁目錄中的槽(slot)采用二分查找的方式先找到一個(gè)粗略的記錄分組,最后在分組中通過鏈表遍歷的方式查找到記錄。
insert
先記錄undo日志
修改buffer pool中的數(shù)據(jù)
? ? ? ? 使用double write buffer 兩次寫進(jìn)行持久化
? ? ? ? 寫redo log?
? ? ? ? ? ? ? ? redo log 根據(jù)設(shè)置的頻率進(jìn)行刷盤
? ? ? ? ? ? ? ? 記錄binlog