在MySQL 5.7中,查询缓存是一项可以将SELECT语句及其结果集缓存起来的机制,当相同的查询再次执行时可以直接返回缓存数据。是否启用以及以何种方式启用,主要由系统变量query_cache_type控制。理解它的取值并正确配置,是开启查询缓存的关键。

query_cache_type的取值含义
在MySQL 5.7里,query_cache_type支持以下三种主要设置:
- OFF或0:完全关闭查询缓存,不缓存任何查询结果,也不从缓存中读取。
- ON或1:开启查询缓存,所有符合条件的SELECT语句默认都会被缓存(除非使用SQL_NO_CACHE)。
- DEMAND或2:按需缓存,只有在SELECT语句中显式使用SQL_CACHE时才缓存结果。
如何通过配置文件开启查询缓存
若希望MySQL服务启动后即按指定方式开启查询缓存,需要修改配置文件(如my.cnf或my.ini),在[mysqld]段中加入相关设置,并重启服务:
[mysqld] # 开启查询缓存,ON等价于1 query_cache_type = 1 # 设置查询缓存总大小为64MB query_cache_size = 64M
如果只想按需开启,可将query_cache_type设为2,然后在业务SQL中显式声明:
SELECT SQL_CACHE * FROM user WHERE id = 10;
运行时动态修改
拥有SUPER权限的用户也可以在运行时修改query_cache_type,但需要注意该变量是全局的,且修改后只对新连接生效:
-- 全局开启查询缓存 SET GLOBAL query_cache_type = 1; -- 查看当前设置 SHOW VARIABLES LIKE 'query_cache_type';
相关参数与注意事项
仅设置query_cache_type还不够,必须保证query_cache_size大于0,否则缓存无法分配内存。可以通过以下命令确认:
SHOW VARIABLES LIKE 'query_cache_size';
| 变量名 | 说明 | 建议值 |
|---|---|---|
| query_cache_type | 缓存开启模式 | 2(DEMAND)较稳妥 |
| query_cache_size | 缓存内存大小 | 32M至256M |
| query_cache_limit | 单条结果最大缓存 | 1M至4M |
使用限制与影响
在5.7中,查询缓存对包含用户自定义函数、临时表、不确定函数(如NOW())的语句不会缓存。此外,表数据发生任何写操作时,该表相关的所有缓存都会失效,高并发写入场景下反而可能因缓存锁带来性能下降。因此生产环境常采用DEMAND模式,仅缓存真正静态的查询。
注意:MySQL 8.0已彻底移除查询缓存功能,本文所述仅适用于5.7及之前版本。
简单验证缓存是否生效
执行同一条SELECT两次,并通过状态变量观察命中情况:
SELECT * FROM config WHERE k = 'site_name'; SHOW STATUS LIKE 'Qcache_hits';
若Qcache_hits数值在第二次查询后增加,说明查询缓存已经正常工作。
mysqlquery_cache_type查询缓存修改时间:2026-07-27 07:00:23