MySQL 8.0+已彻底移除query_cache_size,配置会报错;应改调innodb_buffer_pool_size等有效参数,并在PHP层用APCu或Redis缓存查询结果。

phpEnv 里根本没法配 query_cache_size
如果你用的是 phpEnv(尤其是 2023 年后更新的版本),它默认集成的是 MySQL 8.0 或 MariaDB 10.6+,而这些版本**已彻底删除查询缓存模块**。你哪怕在 my.ini 里写上 query_cache_type = 1 和 query_cache_size = 64M,MySQL 启动时会直接报错:Unknown system variable 'query_cache_type',服务根本起不来。
这不是 phpEnv 的限制,是 MySQL 自身代码级移除——连变量定义都没了,配置文件里写它等于写错别字。
怎么确认你当前 MySQL 是否支持 query_cache
别信配置文件或教程截图,直接进 MySQL 执行:
SHOW VARIABLES LIKE 'query_cache%';
如果返回空结果,说明是 8.0+;如果返回了但 query_cache_type 值为 OFF 或 0,再查 have_query_cache:
SHOW VARIABLES LIKE 'have_query_cache';
返回 NO 就彻底没戏。很多 phpEnv 用户装完就默认跑 8.0,却还在网上搜“如何开启 query cache”,纯属白忙活。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
phpEnv 下真正该调的缓存参数只有这几个
既然 query_cache 已死,就得把资源投在真正起效的地方:
-
innodb_buffer_pool_size:设为物理内存的 50%–75%,这是影响查询性能最硬核的单个参数,决定多少数据和索引能常驻内存 -
innodb_log_file_size:调大可减少 checkpoint 频率,尤其对写多场景明显 -
tmp_table_size和max_heap_table_size:避免频繁创建磁盘临时表 - 禁用无用功能:比如
skip_symbolic_links、local_infile = OFF(除非真需要)
这些参数在 phpEnv 的 MySQL 配置界面(通常是 phpenv\mysql\my.ini)里都能改,改完必须重启 MySQL 服务才生效。
想缓存 SELECT 结果?绕过 MySQL 自己来
query_cache 被删不是没缓存了,而是换地方了:
- PHP 层用
apcu_store()缓存简单查询结果(适合小数据、低频变更) - 业务关键路径用 Redis,key 可设计为
sql_hash:md5("SELECT * FROM user WHERE id=123") - 静态页或列表页,直接生成 HTML 片段缓存,比数据库层缓存更可控
真正容易被忽略的是:很多人花半天调 query_cache_limit,却没给 user 表加 id 索引——一条没索引的 SELECT,就算缓存命中,首次执行也慢得离谱。缓存不该用来掩盖低效 SQL。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










