日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
問了幾人,MySQLchangebuffer這點(diǎn)都沒答對

本文轉(zhuǎn)載自微信公眾號「yes的練級攻略」,作者yes的練級攻略 。轉(zhuǎn)載本文請聯(lián)yes的練級攻略公眾號。

成都創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為隰縣企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),隰縣網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

你好,我是yes。

有位同學(xué)問了我兩個(gè)關(guān)于 change buffer 的問題:

隨后我又挑了幾個(gè)問答的用戶提問這兩個(gè)問題,發(fā)現(xiàn)對 change buffer 的理解都有偏差,于是決定操作一篇。

之前我寫過一篇關(guān)于 mysql innodb 所有 buffer 的內(nèi)容 :總結(jié) mysql 的所有 buffer,一網(wǎng)打盡就這篇了!

里面有提到 change buffer,這篇算是之前那篇的補(bǔ)充吧。

如果對 mysql innodb buffer 不太熟悉,建議先看下我之前總結(jié)的內(nèi)容,這個(gè)還是需要點(diǎn)前置知識的。

簡單回顧 change buffer

簡單來說 change buffer 就是一塊內(nèi)存,存在于 buffer pool 中,當(dāng)需要修改數(shù)據(jù)時(shí)候,如果這個(gè)數(shù)據(jù)所在頁在 buffer pool,那么萬事大吉,直接在內(nèi)存也修改。

那假設(shè) buffer pool 里沒有要修改的那個(gè)數(shù)據(jù)頁,這時(shí)候該修改怎么辦呢?

假設(shè)要執(zhí)行這個(gè) sql:update table set a= 'yes' where b = 1

第一直覺就是找到 b =1 的數(shù)據(jù)所在的數(shù)據(jù)頁,加載到 buffer pool 中,然后進(jìn)行修改,這里就涉及了從磁盤拉取數(shù)據(jù)到內(nèi)存這個(gè)動(dòng)作,我們都知道讀盤的開銷是比較大的。

所以 mysql innodb 搞了個(gè) change buffer,當(dāng)數(shù)據(jù)頁不存在 buffer pool 時(shí),mysql innodb 先把更新動(dòng)作緩存在 change buffer 中,當(dāng)下次 select b=1 這個(gè)數(shù)據(jù)的時(shí)候,將數(shù)據(jù)加載到 buffer pool 中,同時(shí)應(yīng)用上 change buffer 的修改,這就得到正確的數(shù)據(jù)了。

圖來自mysql官網(wǎng)

重點(diǎn)

上述的原理不難理解,不過我之前文章提到了一點(diǎn):

這就是重點(diǎn),理解了這個(gè)就能解答上面那位同學(xué)的提問。

change buffer 只能應(yīng)用非唯一二級索引

聚蔟索引和唯一索引都需要檢查數(shù)據(jù)的一致性,這就不好先把更新、插入、刪除先緩存在 change buffer 中。

假設(shè)現(xiàn)在有一張名為 yes 表,里面有聚蔟索引以及一個(gè)(a,b) 的非唯一二級索引,現(xiàn)要執(zhí)行如下語句:

update yes set b= 'yes的練級攻略' where a = 'yesyes'

思考下,此時(shí)能用上 change buffer 嗎?

原則上這條更新語句,mysql 可以選擇聚蔟索引掃,或者應(yīng)用 (a,b)這個(gè)索引。

假設(shè)走(a,b)索引。

那問題來了,要走(a,b)索引,不就是要掃描(a,b)的數(shù)據(jù)嗎,也就是需加載(a,b)索引數(shù)據(jù)頁到 buffer pool 中,那還用啥 change buffer?

聽起來 change buffer 好像沒啥用?。?/p>

我再加點(diǎn)條件:假設(shè)這個(gè)表不僅僅有 (a,b)這個(gè)索引,還有(c,b)、(d,b)等等這些索引,那么如果我們要修改 b 字段的值,是不是除了聚蔟索引,還需要修改(c,b)、(d,b)等等這些索引?

那 change buffer 的用處就來了!我們可以緩存這些修改,后面再應(yīng)用,這就大量減少了此次 sql 的隨機(jī)磁盤 I/O,提高了性能。

看到這,相信你對 change buffer 應(yīng)該已經(jīng)有點(diǎn)感覺了,你可以借著這些感覺,去看下官網(wǎng)的介紹,理解起來更容易:

https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html

回答問題

第一個(gè)問題:insert 用 chang buffer 如何確定主鍵不沖突?

主鍵索引和唯一索引都需要掃描校驗(yàn),change buffer 只會(huì)緩存那些非唯一二級索引的插入操作。

第二個(gè)問題:用 chang buffer 不訪問磁盤,如何得到實(shí)際修改行數(shù)?

chang buffer 無法應(yīng)用在主鍵索引(聚蔟索引)和唯一二級索引上,所以這兩個(gè)得改,主鍵索引都改了,影響行數(shù)就有了。


分享題目:問了幾人,MySQLchangebuffer這點(diǎn)都沒答對
當(dāng)前URL:http://www.dlmjj.cn/article/ccojcdi.html