mysql query cache_MySQL--query-cache
知識準(zhǔn)備:
1、mysql 的query-cache是什么?
mysql可以把執(zhí)行完成的select 語句和這個(gè)select 語句對應(yīng)的結(jié)果集緩存起來;下次再用調(diào)用相同的select 語句時(shí)就直接返回結(jié)果,不是又去執(zhí)行一次select 語句。
由于少了執(zhí)行的這一步,所以返回結(jié)果比較快。mysql為了保證緩存的結(jié)果集與再執(zhí)行一次select 語句時(shí)返回的結(jié)果集是一致的,所以;mysql會去判斷select語句
用到的表是不有變更,如果有那么緩存的結(jié)果集就作廢,為了得到正確的結(jié)果mysql只能是把select 語句再執(zhí)行一次;
2、要注意的地方:
1、query-cache 是在各個(gè)session之間共享的。
2、query-cache 設(shè)置的過大那么它的維護(hù)成本也相應(yīng)的變大,這個(gè)時(shí)候它反而會影響性能。
3、為了確認(rèn)query-cache在當(dāng)前業(yè)務(wù)場景下是否有用,最好的辦法是測試;而且隨著時(shí)間的推移,之前有用的query-cache不一定一直有用;
4、query-cache只有在select 語句完全相同而且表并沒有變更的情況下才會從query-cache中返回結(jié)果集,注意這里的相同指的是字節(jié)序列
上的相同;也就是說select 和SELECT 會被當(dāng)成兩個(gè)不同的東西;select 和select 也有可能會被當(dāng)成兩個(gè)不同的東西,因?yàn)樗鼈冇锌梢杂昧?/p>
不同的字符集,而這一點(diǎn)我們?nèi)搜凼强床怀鰜淼?#xff1b;
5、如果一個(gè)select 查詢是某一查詢的子查詢,那么這個(gè)select 的結(jié)果也不會被緩存,也就是說query-cache只會緩存最終結(jié)果。
6、如果一個(gè)select 它是定義在stored function、event、trigger 中的那么它的結(jié)果集也不會被緩存。
7、就算是有可用的query-cache 結(jié)果集,用戶的權(quán)限不對的話也不會有返回。
8、表的變更語句包括:insert ,update,delete,truncate table,alter table,drop table,drop database。
9、如果select 中包涵有不確定函數(shù)那么結(jié)果集也不會緩存。
配置query-cache:
1、have_query_cache 這個(gè)variable 用來檢測query_cache是否開啟,注意如果是二進(jìn)制包安裝的mysql這個(gè)值會永遠(yuǎn)是YES;所以這并沒有什么卵用。
2、如果要關(guān)閉query_cache那么query_cache_size參數(shù)query_cache_type參數(shù)都要啟動的時(shí)候設(shè)置為0。
3、query_cache_limit 控制一個(gè)結(jié)果集的最大大小是多少。
4、flush query cache 和reset query cache 用于清除query_cache ;它們兩效果是等價(jià)的。
5、如果一個(gè)查詢走的是query-cache 那么Qcache_hits 這個(gè)status 會加1、不然Com_select會加1。
總結(jié)
以上是生活随笔為你收集整理的mysql query cache_MySQL--query-cache的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle10g检测未通过,win64
- 下一篇: 三层加过的注释java_spring框架