在4.1版本的MySQL就加上了查询缓存query cache,不过在默认的情况下是没有开启的。
show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 0 |
| query_cache_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
当我们查看配置时也许会误解have_query_cache | YES 是开启了缓存功能的,其实不have_query_cache只是说明改版是否支持query cache缓存。
query_cache_size | 0
query_cache_type | ON
才是配置的关键,query_cache_size=0,缓存为了,也就不支持。所以在我们的配置文件my.cnf中制定
缓存大小
query_cache_type=1
query_cache_size=32M
这样就开启了缓存,
query_cache_type=1
其实也是默认设置当
query_cache_type=0;
就代表关闭缓存。
query_cache_type = val,其中的val可以是0、1或2,它的意义与设置服务器启动时的query_cache_type变量的意义是相同的。在SET语句中,OFF、ON和DEMAND这些符号值与0、1和2对应。
0,那么可以说,你的缓存根本就没有用,相当于禁用了。但是这种情况下query_cache_size设置的大小系统是否要为其分配呢,这个问题有待于测试?
1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。
2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。
当然还不要忘了query_cache_limit设置被缓存的最大结果集大小;比这个值大的查询结果不会被缓存。由于缓存的命中是一个比较总要的指标,存储一些不常用的大集合的确用处不大,默认是1MB。
query_cache_limit=512k
这里我就把改小大0.5M了。其他的query_cache_min_res_unit(最小单元块)、query_cache_strip_comments、query_cache_wlock_invalidate就不用多说,就保持默认状态吧!
该贴由hui.chen转至本版2015-3-2 9:09:16