新聞中心
我們知道,數(shù)據(jù)庫(kù)的查詢(xún)功能是我們經(jīng)常用到的,那么MySQL數(shù)據(jù)庫(kù)是怎樣進(jìn)行查詢(xún)的呢?本文我們就來(lái)介紹一下MySQL數(shù)據(jù)庫(kù)的查詢(xún)步驟以及緩存原理,接下來(lái)就讓我們來(lái)一起了解一下這一部分內(nèi)容。

10年積累的成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有靈壽免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
當(dāng)MySQL收到客戶端發(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é)果集給客戶端。
通過(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ō):GROUP BY, COUNT等),即使命中率很低,但這也是一個(gè)很好的命中率值。
任何不是從緩存塊中取得數(shù)據(jù)的查詢(xún)語(yǔ)句都稱(chēng)為:緩存錯(cuò)失(cache miss), 造成緩存錯(cuò)失有以下幾種原因:
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等等
關(guān)于MySQL數(shù)據(jù)庫(kù)的查詢(xún)步驟與緩存原理的知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
原文出處:http://52226777.blog.163.com/ 。
【編輯推薦】
- MySQL數(shù)據(jù)庫(kù)如何恰到好處地使用索引?
- PHP的MySQL庫(kù)之Pdo-Mysql與Mysqli性能對(duì)比
- 一個(gè)mysql數(shù)據(jù)庫(kù)配置問(wèn)題導(dǎo)致登錄失敗的解決方案
- MySQL數(shù)據(jù)庫(kù)打開(kāi)文件太多導(dǎo)致mysqldump出錯(cuò)的解決
- MySQL數(shù)據(jù)庫(kù).frm文件、.MYD文件和.MYI文件的修復(fù)方法
本文標(biāo)題:MySQL數(shù)據(jù)庫(kù)查詢(xún)步驟和緩存原理
文章分享:http://m.fisionsoft.com.cn/article/cccdcse.html


咨詢(xún)
建站咨詢(xún)
