mysql 8.0+已移除查询缓存,修改query_cache_size无效;5.7及以下版本才可配置,需在正确my.ini的[mysqld]段添加query_cache_type=2、query_cache_size=64m等参数,并重启服务验证。

phpEnv 中无法通过界面或一键操作修改 query_cache_size,必须手动编辑 MySQL 配置文件,且需注意:MySQL 8.0+ 已彻底移除查询缓存功能,修改无效。
确认 MySQL 版本再动手
phpEnv 默认集成的 MySQL 版本可能为 5.7 或 8.0+。查询缓存(Query Cache)在 MySQL 8.0.3 起被完全删除,query_cache_type、query_cache_size 等参数已不识别,强行添加会导致 MySQL 启动失败。
- 执行
mysql --version或在 phpEnv 控制面板查看 MySQL 版本 - 若版本 ≥ 8.0,请跳过所有 query cache 配置,改用
innodb_buffer_pool_size等现代缓存机制 - 若为 MySQL 5.7 或更早,才可继续配置
找到并编辑正确的 my.ini 文件
phpEnv 的 MySQL 配置文件路径通常不是系统默认位置,容易改错文件导致无效。常见路径有:
-
C:\phpEnv\phpEnv\mysql\my.ini(Windows 下最常见) C:\phpEnv\phpEnv\mysql\conf\my.ini- 务必打开 phpEnv 主界面 → “服务” → “MySQL 配置” 查看实际加载的配置路径(部分版本会显示“当前配置文件:xxx”)
- 不要修改
my-default.ini或备份副本,只改正在被读取的那个my.ini
在 [mysqld] 段落下添加或修改:
query_cache_type = 2 query_cache_size = 64M query_cache_limit = 1M
其中 query_cache_type = 2(即 DEMAND)更安全,避免无差别缓存写多读少的查询;query_cache_size 不建议超过 256M,过大反而因内存碎片和锁争用降低性能。
重启 MySQL 并验证是否生效
仅保存文件不重启,配置不会加载。必须通过 phpEnv 控制面板完整停止再启动 MySQL 服务。
- 重启后连接 MySQL 执行:
SHOW VARIABLES LIKE 'query_cache%'; - 若返回空结果或报错
Unknown system variable,说明版本不支持,不是配置没写对 - 若返回值中
query_cache_size仍为 0,检查是否漏写了[mysqld]段落头,或配置文件编码为 UTF-8 BOM(Windows 记事本易产生),应改用 Notepad++ 保存为 ANSI 或 UTF-8 无 BOM - 运行
SHOW STATUS LIKE 'Qcache%';观察Qcache_hits是否随重复 SELECT 增长,确认缓存真正起效
缓存命中低?别硬调 query_cache_size
即使配置正确,Query Cache 在多数现代业务中效果有限甚至拖慢性能——尤其当表更新频繁、SQL 文本稍有差异(如不同 LIMIT 值、空格、注释)、或存在用户变量时,缓存会立即失效。
- 优先检查
Qcache_lowmem_prunes:该值持续上升,说明缓存频繁被挤出,增大query_cache_size只是治标 - 更有效的方式是优化 SQL 和索引,比如把
SELECT * FROM orders WHERE user_id = ?改为只查必要字段,并在user_id上建索引 - 若使用 PHP 连接,确保没在 SQL 中混用
SQL_NO_CACHE或SQL_CACHE写法冲突(例如某处写了SELECT SQL_NO_CACHE ...,就永远绕过缓存)
真正影响响应速度的,往往是 innodb_buffer_pool_size 是否设为物理内存的 50%–70%,而不是 query cache 的那几十兆。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











