MySQL 的查询缓存(MySQL Query Cache)是在4.1 版本以后新增的功能,它的作用是存
储SELECT 查询的文本以及相应结果。如果随后收到一个相同的查询,服务器会从查询缓存
中重新得到查询结果,而不再需要解析和执行查询。
查询缓存的适用对象是更新不频繁的表,当表更改(包括表结构和表数据)后,查询缓
存值的相关条目被清空。
查询缓存相关的参数主要有以下几个:
mysql> 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_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
6 rows in set (0.00 sec)
对于以上几个参数,具体解释如下。
have_query_cache 表明服务器在安装是否已经配置了高速缓存
query_cache_size 表明缓存区大小,单位为M。
query_cache_type 的变量值从0 到2,含义分别为:
0 或者off(缓存关闭)
1 或者on(缓存打开,使用SQL_NO_CACHE 提示的SELECT 除外)
2 或者demand(只有带SQL_CACHE 的SELECT 语句提供高速缓存)
通过SHOW STATUS 命令,可以监视查询缓存的使用状况,如下表所示。
表中 MySQL 查询缓存的性能监控参数
变量 含义
Qcache_queries_in_cache 在缓存中已注册的查询数目
Qcache_inserts 被加入到缓存中的查询数目
Qcache_hits 缓存采样数数目
Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
Qcache_not_cached 没有被缓存的查询数目(不能被缓存的,或由于QUERY_CACHE_TYPE)
Qcache_free_memory 查询缓存的空闲内存总数
Qcache_free_blocks 查询缓存中的空闲内存块的数目
Qcache_total_blocks 查询缓存中的块的总数目