Query Cache确实是以比较简单的实现带来巨大性能收益的功能。但可能很多人都忽略了使用QueryCache之后所带来的负面影响
(1)Query的hash运算及hash查找资源消耗
在使用Query Cache,每条SELECT类型的Query到达MySQL之后,都须要进行一个hash运算,然后查找是否存在该Query的Cache,虽然这个hash运算的算法可能已经非常高效,且hash查找的过程也已经足够的优化了,对于一条Query来说消耗的资源确实是非常之少,但是当发生高并发Query时,就不能忽视对CPU的消耗了
(2)Query Cache的失效问题
如果表的变更比较频繁,则会造成Query Cache的失效率非常高。这里表的变更不仅指表中数据的变更,还包括结构或索引等的任何变更。也就是说每次缓存到Query Cache中的Cache数据可能在被存入后很快就会因为表中的数据被改变而被清除,导致新的相同Query进来后无法使用到之前的Cache
(3)内存资源过渡消耗问题
Query Cache中缓存的是Result Set,而不是数据页,也就是说,存在同一条记录被Cache多次的可能性,从而造成内存资源的过渡消耗。当然,可以限定Query Cache的大小,但是这样,Query Cache就很容易造成因为内存不足而被换出,造成命中率下降
这几个问题甚至可能同时发生,那么,Query Cache的使用就得不偿失了