更新 2026年8月9日

查询性能优化

优化背景

网站目前虽然当前访问速度尚可,但排查发现影片表在主排序字段上缺少索引,这部分开销会随内容量增长线性上升,因此提前做了一轮优化。

数据库索引

影片表的主要排序依据是更新时间,但此前该字段上没有任何索引,导致每次翻页都要扫描全表再重新排序。本次新增 7 个复合索引,覆盖最新更新、豆瓣评分、类型、地区、年份等排序与筛选组合,让数据库可以直接沿索引顺序取数,不再需要额外的排序步骤。

查询逻辑重写

首页、分类页、搜索页原本存在几处重复查询。每部影片的分类信息是逐条查询的,一页 24 部就是 24 次数据库往返;在线与网盘资源数是逐行子查询统计的,一页会产生 48 次子查询。现已全部改为按当页影片 ID 批量查询,24 次往返合并为 1 次,48 次子查询合并为 1 次聚合查询。

站点设置读取

站点配置项此前每读取一个键就查询一次数据库,单个首页请求会重复查询 7 次。现改为整表一次读入并在请求内缓存。类型、分类、地区这些几乎不变的字典数据也加了缓存层。

冗余查询清理

去掉了主查询中不必要的去重操作,以及两段重复执行的结果去重循环,还有筛选时重复执行的编码转换查询。另外发现影片卡片实际并不展示分类标签,此前逐条查询取回的分类数据是直接丢弃的,这部分查询已完全移除。

整体效果

单次首页请求的数据库查询次数从约 40 次降到 8 次,排序阶段的全表扫描已消除。当前数据量下页面响应本来就不慢,因此体感变化有限,主要收益体现在深层分页、高并发抓取,以及后续内容量增长后的稳定性。

其他修复

修复了部署过程中站点配置文件可能被自动改写的问题,避免因配置缺失导致的服务异常。