今天就跟大家聊聊有關(guān)MySQL數(shù)據(jù)庫(kù)緩存原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),淄博企業(yè)網(wǎng)站建設(shè),淄博品牌網(wǎng)站建設(shè),網(wǎng)站定制,淄博網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,淄博網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
MySQL數(shù)據(jù)庫(kù)查詢(xún)步驟有哪些
當(dāng)MySQL收到客戶(hù)端發(fā)送的查詢(xún)語(yǔ)句時(shí),首先會(huì)檢查緩存塊中是否緩存中此語(yǔ)句的結(jié)果,如果有,則檢查權(quán)限,如果能通過(guò)權(quán)限的檢查則直接返回緩存塊中的結(jié)果集,我們稱(chēng)之為命中緩存,此時(shí)會(huì)增加Qcache_hits變量的值。
如果在緩存中找不到此語(yǔ)句的緩存(此時(shí)會(huì)增加Com_select變量的值),則進(jìn)入下一步:
1、MySQL解析器將查詢(xún)語(yǔ)句分解成一個(gè)個(gè)標(biāo)識(shí),并建立一棵“解析樹(shù)”,解析器會(huì)使用MySQL的語(yǔ)法解析和驗(yàn)證這個(gè)查詢(xún)語(yǔ)句的標(biāo)識(shí)的有效性及標(biāo)識(shí)是否出現(xiàn)在適當(dāng)?shù)奈恢蒙希€會(huì)檢查字符串中的引號(hào)有沒(méi)有閉合。
2、預(yù)處理器會(huì)檢查此“解析樹(shù)”中的表和列是否存在,列的別名是否混淆,最后就是對(duì)權(quán)限的檢查,而這些檢查特性是解析器不具備的,只能通過(guò)預(yù)處理器來(lái)完成。
3、如果前面兩步都通過(guò)了檢驗(yàn),MySQL的優(yōu)化器則對(duì)“解析樹(shù)”進(jìn)行優(yōu)化,并根據(jù)所預(yù)測(cè)的執(zhí)行成本來(lái)生成執(zhí)行成本最低的執(zhí)行計(jì)劃。最后執(zhí)行此計(jì)劃,存儲(chǔ)查詢(xún)結(jié)果,返回結(jié)果集給客戶(hù)端。
通過(guò)上述兩個(gè)變量值,我們可以通過(guò)這個(gè)公式計(jì)算出緩存的命中率:Qcache_hits/(Qcache_hits_Com_select),通過(guò)命中率來(lái)查看我們是否可以從緩存中獲益。這里有一個(gè)問(wèn)題就是:命中率的多少才是最好的呢?這個(gè)沒(méi)有確定值的,要根據(jù)情況而定,如果命中的是那些要篩選大量數(shù)據(jù)才得到的結(jié)果的查詢(xún)語(yǔ)句(比如說(shuō):GROUPBY,COUNT等),即使命中率很低,但這也是一個(gè)很好的命中率值。
MySQL數(shù)據(jù)庫(kù)緩存原理有哪些
1、所發(fā)送的查詢(xún)語(yǔ)句是不可緩存的,查詢(xún)語(yǔ)句不可緩存的原因有兩種:語(yǔ)句包含了不確定值,如CURRENT_DATE,。所得到的結(jié)果集太大而無(wú)法將它保存到緩存中.這兩種原因造成的結(jié)果都會(huì)增加Qcache_not_cached變量的值,我們可以查看這個(gè)變量的值來(lái)檢查我們查詢(xún)語(yǔ)句的緩存情況.
2、所發(fā)送的查詢(xún)語(yǔ)句之前沒(méi)有發(fā)送過(guò)(第一次發(fā)送),所以也不會(huì)有什么緩存存在。
3、所發(fā)送的查詢(xún)語(yǔ)句的結(jié)果集之前是存在于緩存中的,但由于內(nèi)存不足,MySQL不得不將之前的一些緩存清除,以騰出空間來(lái)放置其它新的緩存結(jié)果。同樣,數(shù)據(jù)的變更也會(huì)引發(fā)緩存的失效。比如(更新,刪除,插入)。如果是數(shù)據(jù)的變量引起緩存的失效的話,我們可以通過(guò)查看Com_*變量的值來(lái)確認(rèn)有多少查詢(xún)語(yǔ)句更改了數(shù)據(jù),這些變量為:Com_update,Com_delete等等。
看完上述內(nèi)容,你們對(duì)MySQL數(shù)據(jù)庫(kù)緩存原理是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。