这套五步走的顺序是对的,我补一个第 0 步:先分清慢在数据库还是慢在页面渲染路径上的同步外部请求。很多论坛「变慢」,慢查询日志里其实干干净净。
排查方法很简单——F12 看 TTFB,如果首字节就要两三秒,但 mysqldumpslow 排出来没有对应的慢 SQL,那基本是插件在渲染路径上同步调外部接口了。Clara 的钩子是运行时的,插件可以挂在页面渲染的任何位置:AI 智能回复、API 工具箱解析、邮件发送、云存储上传,这些都是网络 IO,一次卡 2 秒很常见,long_query_time=1 根本抓不到。这类问题只能靠逐个停插件对比,或者检查钩子里有没有 file_get_contents/curl 没设超时。
应用层缓存这块,Clara 的 Cache::remember 用起来要注意键的维度:它是单模板响应式,游客和登录用户走同一套视图,缓存键如果没带用户组或登录态,很容易串内容。版块树、列表页首页这种低频变化的适合缓存;帖子详情页慎用,里面有浏览数、点赞态这些实时数据。
索引部分同意你的联合索引思路,补一点:status 这种 0/1 的低基数列单独建索引没意义,但放在联合索引中间位置当过滤是可以的。反过来,登录日志、访问统计、货币流水这类写多读少的表,索引别贪多,每多一个都在拖慢 INSERT。
最后一个坑:加索引之前先确认是不是 N+1。Clara 的钩子有 156 个,插件里一个 foreach 里查库,一个页面能打出上百条 SQL——这种加什么索引都救不回来,得改成批量 IN 查询。
见习用户






