mysql 5.7 及更早版本支持查询缓存,可通过配置 query_cache_type、query_cache_size 和 query_cache_limit 开启并优化缓存效果。首先确认 mysql 版本是否支持查询缓存,若为 5.7 或更低版本,可在配置文件中设置 query_cache_type=1 以自动缓存可缓存的 select 查询,分配 64mb 缓存空间(可调),并限制单次查询结果缓存上限为 2mb,修改后重启生效;其次通过 show status like ‘qc%’ 检查缓存状态,关注 qcache_hits(命中次数)、qcache_lowmem_prunes(内存不足清除次数)等指标,若清除次数过高则应增加缓存大小;最后优化缓存使用,避免频繁更新表的缓存,适用于重复执行且数据变化不大的查询,sql 语句需完全一致才能命中缓存,同时避免盲目增大缓存大小以防止管理开销上升。合理配置查询缓存可有效减少重复查询压力,适用于读多写少的场景。
安装完 MySQL 后,如果你希望提升数据库查询效率,查询缓存(Query Cache)是一个可以考虑的优化手段。虽然从 MySQL 8.0 开始官方已经移除了查询缓存功能,但在之前的版本中(如 5.7 及更早),它依然是一个有效的性能优化工具。
一、确认你的 MySQL 版本是否支持查询缓存
在设置查询缓存之前,首先要确认你使用的 MySQL 版本是否还保留了这个功能。你可以通过以下命令查看当前版本:
SELECT VERSION();
如果版本是 5.7 或更低,那就可以继续配置;如果是 8.0 及以上,那就不支持原生查询缓存了,需要考虑其他方式替代,比如使用 redis、memcached 或者应用层缓存。
二、开启并配置查询缓存
MySQL 的查询缓存默认是关闭的,你需要手动在配置文件中启用并调整参数。主要涉及以下几个配置项:
- query_cache_type:控制缓存类型
- query_cache_size:设置缓存总大小
- query_cache_limit:单条查询结果的最大缓存大小
通常建议在 my.cnf 或 my.ini 中添加如下配置:
[mysqld] query_cache_type = 1 query_cache_size = 64M query_cache_limit = 2M
说明:
- query_cache_type = 1 表示自动缓存所有可缓存的 SELECT 查询。
- query_cache_size = 64M 设置缓存空间为 64MB,可以根据服务器内存适当调整。
- query_cache_limit = 2M 表示单次查询结果超过 2MB 就不会被缓存。
修改后重启 MySQL 生效。
三、检查缓存状态和命中情况
设置完成后,可以通过以下 SQL 查看缓存运行状态:
SHOW STATUS LIKE 'Qc%';
常见的几个指标:
- Qcache_hits:缓存命中次数,越高越好
- Qcache_inserts:缓存插入次数
- Qcache_not_cached:未被缓存的查询数
- Qcache_lowmem_prunes:因内存不足而删除的缓存项数量
如果你发现 Qcache_lowmem_prunes 数值很高,说明缓存空间不够用了,可以考虑增加 query_cache_size。
四、优化查询缓存使用效果
为了更好地发挥查询缓存的作用,需要注意以下几点:
-
避免频繁更新的表使用缓存
如果一张表经常被写入数据,那么对应的查询缓存会被频繁清空,反而影响性能。 -
对重复执行的查询最有效
缓存适合那些经常被执行且数据变化不大的 SELECT 查询。 -
SQL 语句要完全一致才能命中缓存
比如 SELECT * FROM users WHERE id=1; 和 select * from users where id=1; 是不同的,后者不会命中缓存。 -
不要盲目增大缓存大小
虽然看起来缓存越大越好,但过大的缓存可能导致管理开销上升,反而降低效率。
基本上就这些。合理配置查询缓存能显著减少数据库的重复查询压力,特别是在读多写少的场景下效果明显。不过也要注意,它并不是万能的,随着数据量增长或并发提高,可能还需要结合其他优化手段一起使用。