MySQL 8.0 已彻底移除 Query Cache,因其缓存粒度粗、全局锁瓶颈、命中率低且不支持现代 SQL 特性;推荐采用应用层缓存、Buffer Pool 优化及读写分离等分层策略替代。
MySQL 5.7 及更早版本中的 Query Cache(查询缓存)已被官方弃用,并在 MySQL 8.0 中彻底移除。它曾试图通过缓存 SELECT 查询结果来加速重复读操作,但实际使用中常因失效频繁、锁竞争严重、命中率低等问题反而拖慢系统性能。
Query Cache 在服务端对完整 SQL 文本做哈希计算,匹配后直接返回缓存的结果集。它要求查询语句完全一致(包括空格、大小写、注释),且涉及的表只要发生任何 DML(INSERT/UPDATE
/DELETE)或 DDL 操作,该表关联的所有缓存条目就会被清空。
真实业务场景中,查询参数多变、数据更新频繁、SQL 生成方式多样(ORM、拼接、分页偏移等),导致 Query Cache 命中率普遍低于 10%。运维人员常发现开启后 QPS 不升反降,TPS 波动加剧,最终选择显式关闭(query_cache_type=0)。
当前高性能 OLTP 场景下,不应再依赖服务端查询缓存机制,而应构建分层缓存策略:
Query Cache 的消亡不是缓存价值的否定,而是对“通用、透明、服务端强制缓存”思路的反思。真正有效的缓存必须理解业务语义、可控失效、可监控、可降级。与其纠结一条 SQL 是否被缓存,不如花时间厘清数据访问模式、划分冷热层级、设计合理的缓存键和过期策略。