ThinkPHP字段缓存通过预生成PHP数组文件实现,非开关式配置;需关闭调试模式后执行php think optimize:schema命令生成,存于runtime/schema/目录,避免每次查询重复执行SHOW FULL COLUMNS。

ThinkPHP 的数据库字段缓存(Schema 缓存)不是“开关式”配置项,而是通过预生成缓存文件实现的。它不依赖 config 文件里的某个布尔值开启/关闭,而是由命令触发、运行时自动加载的静态结构缓存。
为什么需要字段缓存
每次执行模型查询前,框架默认会读取数据表结构(如字段名、类型、主键、索引等),尤其在调试模式或未生成缓存时,会反复执行 SHOW FULL COLUMNS FROM `table_name` 或 DESCRIBE 类 SQL。这不仅增加数据库连接开销,还拖慢 ORM 初始化速度。启用字段缓存后,这些信息被固化为 PHP 数组写入 runtime/schema/ 目录,后续请求直接 include,跳过数据库查询。
如何启用字段缓存
只需在项目根目录执行一条命令:
-
执行生成命令:
php think optimize:schema -
确认条件满足:确保
app_debug => false(否则命令会被跳过),且runtime/schema/目录存在、可写 -
验证是否生效:查看
runtime/schema/下是否生成了类似mysql__database_name__table_name.php的文件,内容为带注释的数组定义
字段缓存的更新与清理
该缓存不会自动监听表结构变更。当数据库加字段、改类型后,必须手动刷新:
立即学习“PHP免费学习笔记(深入)”;
- 重新执行
php think optimize:schema - 或清空整个
runtime/schema/目录(注意:不影响其他 runtime 子目录) - 开发阶段若频繁改表,可写个简单脚本,在 migration 后自动触发该命令
配合使用效果更佳
字段缓存需与其他优化协同才能发挥最大作用:
- 关闭调试模式:
'app_debug' => false(否则 schema 缓存不加载) - 启用配置缓存:
php think optimize:config,避免重复解析 database.php - 启用路由缓存:
php think optimize:route,减少请求匹配耗时 - 确保数据库连接配置中
'deploy' => 0(单库)且'strict' => true,让字段缓存更准确



















