mysql的查询缓存功能可以在重复执行相同查询时直接返回缓存结果,避免重复解析和执行SQL,对读多写少的业务场景有很好的性能提升效果。安装mysql后默认查询缓存可能未开启或配置不合理,需要手动调整相关参数。

查询缓存核心配置参数
mysql的查询缓存相关配置都在配置文件my.cnf(Linux系统)或my.ini(Windows系统)中,主要参数如下:
| 参数名 | 作用 | 默认值 |
|---|---|---|
| query_cache_type | 控制查询缓存开启状态 | 0(关闭) |
| query_cache_size | 查询缓存占用的总内存大小 | 0(不分配内存) |
| query_cache_limit | 单个查询结果可缓存的最大大小 | 1048576(1MB) |
| query_cache_min_res_unit | 查询缓存分配内存的最小单位 | 4096(4KB) |
具体配置步骤
1. 修改配置文件
首先找到mysql的配置文件,Linux系统一般在/etc/my.cnf或者/etc/mysql/my.cnf,Windows系统在mysql安装目录下的my.ini。在[mysqld]模块下添加或修改以下配置:
[mysqld] # 开启查询缓存,1表示开启,0表示关闭,2表示按需开启(仅SQL中带SQL_CACHE的查询才缓存) query_cache_type=1 # 分配查询缓存内存,建议设置为64M到256M之间,根据实际业务调整,单位是字节 query_cache_size=134217728 # 单个查询结果最大缓存大小,默认1MB,可根据大查询需求调整 query_cache_limit=2097152 # 最小内存分配单位,默认4KB,一般不需要修改 query_cache_min_res_unit=4096
2. 重启mysql服务
修改完配置文件后需要重启mysql服务让配置生效,不同系统重启命令如下:
- Linux系统(systemd管理):
systemctl restart mysqld - Linux系统(sysvinit管理):
service mysqld restart - Windows系统:在服务管理器中重启mysql服务,或执行
net stop mysql & net start mysql
3. 验证配置是否生效
重启后登录mysql执行以下SQL查看配置状态:
-- 查看查询缓存相关参数 SHOW VARIABLES LIKE 'query_cache%'; -- 查看查询缓存运行状态 SHOW STATUS LIKE 'Qcache%';
如果query_cache_type显示为ON,query_cache_size显示为设置的值,说明配置已经生效。
查询缓存使用注意事项
- 查询缓存对写操作频繁的表效果很差,因为表有数据更新时,该表相关的所有查询缓存都会被清空。
- SQL语句必须完全一致才会命中缓存,包括大小写、空格、注释的差异都会导致无法命中。
- 如果查询中包含不确定函数比如
NOW()、UUID(),或者用户自定义函数,结果不会被缓存。 - mysql 8.0版本已经彻底移除了查询缓存功能,如果你使用的是8.0及以上版本,无法配置该功能。
临时调整查询缓存配置
如果不想修改配置文件,也可以登录mysql后执行以下命令临时调整配置,不过重启服务后会恢复为配置文件中的值:
-- 临时开启查询缓存 SET GLOBAL query_cache_type=1; -- 临时设置查询缓存大小为128M SET GLOBAL query_cache_size=134217728;