第三節(jié)、mysql組件2——查詢緩存

查詢緩存

連接建立完成后,就可以執(zhí)行語(yǔ)句了,這里以select * from T where ID=10;?為例子。

mysql拿到一個(gè)查詢請(qǐng)求后,會(huì)先到查詢緩存看看,之前是不是執(zhí)行過(guò)這條語(yǔ)句。之前執(zhí)行過(guò)的語(yǔ)句及其結(jié)果可能會(huì)以key-value對(duì)的形式,被直接緩存在內(nèi)存中。key是查詢的語(yǔ)句,value是查詢的結(jié)果。

如果查詢能夠直接在這個(gè)緩存中找到key,那么這個(gè)value就會(huì)被直接返回給客戶端;

如果語(yǔ)句不在查詢緩存中,就會(huì)繼續(xù)后面的執(zhí)行階段。執(zhí)行完成后,執(zhí)行結(jié)果會(huì)被存入查詢緩存中。

如果查詢命中緩存,mysql不需要執(zhí)行后面的復(fù)雜操作,就可以直接返回結(jié)果,這個(gè)效率會(huì)很高。

查詢緩存的缺點(diǎn)

查詢緩存的失效非常頻繁,只要有對(duì)一個(gè)表的更新,這個(gè)表上所有的查詢緩存都會(huì)被清空。因此很可能使得緩存起來(lái)的結(jié)果還沒(méi)有使用,就被一個(gè)更新全清空了。對(duì)于更新壓力大的數(shù)據(jù)庫(kù)來(lái)說(shuō),查詢緩存的命中率會(huì)非常低。除非你的業(yè)務(wù)就是有一張靜態(tài)表,很長(zhǎng)時(shí)間才會(huì)更新一次,比如一個(gè)系統(tǒng)配置表,那這張表上的查詢才適合使用查詢緩存。

mysql中查詢緩存的使用方案

mysql中提供了“按需使用”的方式??梢詫?shù)query_cache_type設(shè)置成DEMAND,這樣對(duì)于默認(rèn)的SQL語(yǔ)句都不使用查詢緩存,而對(duì)于你確定要使用查詢緩存的語(yǔ)句,可以用SQL_CACHE顯式制定,像下面這個(gè)語(yǔ)句一樣:

select SQL_CACHE * from T where id=10;

需要注意的是,mysql8.0版本直接將查詢緩存的整塊功能刪掉了,也就是說(shuō)8.0開(kāi)始徹底沒(méi)有這個(gè)功能了。

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

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

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