关联多表后,分页查询很慢的一个解决思路

黄鹏宇 65 2024-05-28

背景

当我们关联很多张表进行查询时,即便使用了分页插件进行查询,会发现还是很慢。
究其原因是分页插件都会先进行COUNT()查询,这个操作相当慢。

解决思路

  1. 改数据库表为宽表,降低关联次数
  2. 将查询操作拆成两个步骤
    1. 去掉与where无关的关联表,进行查询,供COUNT计算总数,且返回id array
    2. 根据步骤1得出的id array,再做全数据的查询,用主键 in 来精准查。

效果

24c44e960e6397da785bcca2ac10ab4
线上1分钟,是因为设置接口超时时间为1分钟,实际远远超过这个时间…
优化后,同样的参数只需要1秒。

实践

1. 原有逻辑 findByParams

image-1716898011042

2. 优化后逻辑

1. service

image-1716900684233

2. controller

image-1716900719567

3. SQL:findByParamsForPaging

image-1716898166511

4. SQL: findIn

image-1716898193545