今天将新搭建的数据库的查询速度和之前搭的低版本的作对比,发现新搭的数据库第一次查询比较快,只用了1秒多,而同样的第二次第三次查询所用的时间差不多,而低版本所用的时间第一次用了48秒,而第二第三次几乎是0。想了下,猜到应该是低版本的用了查询缓存,而新搭建的没用。

        度娘下,查询MySQL有没有打开的指令是select @@query_cache_type;,登陆新搭建的输入一看,果然是关着的,而之前的则是打开。

mysql> select @@query_cache_type;
+--------------------+
| @@query_cache_type |
+--------------------+
| OFF                |
+--------------------+
1 row in set (0.00 sec)
        打开query_cache_type只需要在my.ini里面加一句query_cache_type=1再重启MySQL就OK了。而配置的参数有query_cache_size,默认是201M。     查询缓存的状态的指令是show status like '%Qcache%';,查询相关设置的指令是show variables like '%query_cache%';,而查询缓存命中率的计算公式是:Qcache_hits/(Qcache_hits + Com_select)。Com_select的值用show status like '%Com_select%';来查,而Qcache_hits的值则是用show status like '%Qcache%';。查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%。
网上的优化建议:
如果Qcache_lowmem_prunes 值比较大,表示查询缓存区大小设置太小,需要增大。
如果Qcache_free_blocks 较多,表示内存碎片较多,需要清理,flush query cache。
根据《High Performance MySQL》中所述,关于query_cache_min_res_unit大小的调优,书中给出了一个计算公式,可以供调优设置参考:query_cache_min_res_unit = (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache。
       对于查询比较多的网站,数据库更新比较少的网站,如博客之类,将query_cache_type设为1打开缓存可优化性能。而对于数据库表频繁更新的则建议关了这个缓存。