外網 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 管理,提交到生產環境即可
注意:每次更改表字段,或新增數據表后,都需要重新執行以上操作
當然,最優解就是弄成自動執行,將該命令寫成可執行腳本,
並設置好 jenkins 的 hook ,每次部署代碼后,自動運行腳本。