ThinkPHP 5 项目执行慢问题排查
外网 ThinkPHP 5 运行的一个网站,感觉有点慢。排查了下每个页面在执行过程中,
都会有很多 SHOW COLUMNS FROM xxxxx 的语句(平均一个页面有8条),
大量额外的SQL查询,导致页面加载比较慢。
在 TP3 中,可以通过设置 DB_FIELDS_CACHE = true(开启字段缓存),来关闭对表信息的查询。
不过在 ThinkPHP 5 中,取消了这个配置项,改为使用命令 php think optimize:schema 生成字段缓存。
那么问题来了,在外网我们没有 php think optimize:schema 的执行权限 。
解决方案,在自己的开发环境执行一次以上命令,
你的 站点目录下就会生成新的 runtime/schema 目录,里面会有很多表信息的缓存文件
将 schema 目录 和里面的缓存文件,都纳入 SVN 管理,提交到生产环境即可
注意:每次更改表字段,或新增数据表后,都需要重新执行以上操作
最优解还是用代码自动生成字段缓存,具体方法可以参考: