如何优化 MySQL 的查询缓存?
美国、香港服务器
如何优化 MySQL 的查询缓存?
05-08 来源:
MySQL 查询缓存(Query Cache)优化 + 正确使用指南
我给你最准确、最安全、不踩坑的优化方案,直接复制就能用。
一、先搞懂:查询缓存是什么?
查询缓存 = MySQL 把查询过的 SQL 结果存到内存里下次相同查询直接从内存拿,不用再查磁盘,速度极快。
但注意:
MySQL 5.7 可用
MySQL 8.0 已废弃查询缓存(不能用)
MariaDB 全部支持
二、最优查询缓存配置(直接复制)
编辑 MySQL 配置:
bash
运行
nano /etc/my.cnf
在 [mysqld] 下面加入:
ini
# ========== 查询缓存优化 ==========
query_cache_type = 1 # 开启缓存
query_cache_size = 128M # 缓存大小(2G内存设64M,4G+设128M-256M)
query_cache_limit = 2M # 单条SQL最大缓存2M,太大不缓存
query_cache_min_res_unit = 2k # 最小缓存块
query_cache_wlock_invalidate = OFF
保存后重启:
bash
运行
systemctl restart mysqld
# 或
systemctl restart mariadb
三、最关键的 3 个参数(必须懂)
1. query_cache_size
分配内存给查询缓存用
2G 内存 → 64M
4G 内存 → 128M
8G+ 内存 → 256M
不要超过 256M,太大反而变慢。
2. query_cache_type = 1
1 = 自动缓存所有查询
0 = 关闭
2 = 手动缓存(需要写 SQL_CACHE)
3. query_cache_limit = 2M
大于 2M 的查询结果不缓存,避免大 SQL 占满内存。
四、查看缓存是否生效(命令)
登录 MySQL:
bash
运行
mysql -u root -p
查看缓存状态:
sql
SHOW STATUS LIKE "Qcache%";
看这 3 个就行:
Qcache_hits → 缓存命中次数(越高越好)
Qcache_inserts → 新缓存次数
Qcache_free_memory → 剩余缓存内存
五、什么时候应该开启查询缓存?
适合:
网站 读多写少(新闻、博客、企业站、商品页)
数据不频繁变化
大量相同 SQL 查询
不适合:
商城实时数据
后台频繁写入、更新
高写入、高实时性系统
六、高级优化:让缓存效率更高
1. 大表不缓存(手动控制)
sql
SELECT SQL_NO_CACHE * FROM big_table;
2. 强制缓存
sql
SELECT SQL_CACHE * FROM product WHERE id=100;
3. 清理缓存(不用重启)
sql
RESET QUERY CACHE;
FLUSH QUERY CACHE;
七、MySQL 8.0 用户注意
MySQL 8.0 删除了查询缓存,不能用!替代方案:
使用 Redis 缓存
使用 Nginx 缓存
使用 应用层缓存
最简单总结
开启:query_cache_type=1
内存:64M~256M 最合适
限制:单 SQL 不超过 2M
查看:SHOW STATUS LIKE "Qcache%"
MySQL 8.0 不能用,改用 Redis
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快