Q:innodb buffer pool和Qcache的緩存區(qū)別?
A:
1、Qcacche緩存的是SQL語(yǔ)句及對(duì)應(yīng)的結(jié)果集,緩存在內(nèi)存,最簡(jiǎn)單的情況是SQL一直不重復(fù),那Qcache的命令率肯定是0;
2、buffer pool中緩存的是整張表中的數(shù)據(jù),緩存在內(nèi)存,SQL再變只要數(shù)據(jù)都在內(nèi)存,那么命中率就是100%。
一、查詢緩存(QueryCache)
1、關(guān)于查詢緩存機(jī)制
開(kāi)啟了緩存,會(huì)自動(dòng)將查詢語(yǔ)句和結(jié)果集返回到內(nèi)存,下次再查直接從內(nèi)存中取;
查詢緩存會(huì)跟蹤系統(tǒng)中每張表,若表發(fā)生變化,則和該張表相關(guān)的所有查詢緩存全部失效,這是和buffer pool緩存機(jī)制很大的區(qū)別;
檢查查詢緩存時(shí),MYSQL不會(huì)對(duì)SQL做任何處理,它精確的使用客戶端傳來(lái)的查詢,只要字符大小寫(xiě)或注釋有點(diǎn)不同,查詢緩存就認(rèn)為是不同的查詢;
任何一個(gè)包含不確定的函數(shù)(比如now()、curren_date())的查詢不會(huì)被緩存。