• 为什么Mybatis-Plus分页插件分页查询速度十分缓慢?
  • 发布于 2个月前
  • 240 热度
    0 评论
前言
在项目中使用Mybatis-Plus分页插件分页查询十分缓慢,但是在数据库中执行查询时速度却很快?该数据库的表共有50000条数据,分页查询时,在数据库中时很快,但是在使用Mybatis-Plus分页插件的时候居然7s多,但通过客户端执行相应sql语句,响应很快,毫秒级别。

后面通过代码debug,发现其在分页count统计记录数时耗时,在做分页查询的时候,select count(1) 会先把原来的查询语句全部重新查询一遍(未做数量限制),然后再执行select count(1)操作,相当于查询两遍,导致查询速度慢,为了确认,又用统计的sql执行了一下。

优化
Pagehelper

如果你是使用Pagehelper方式进行分页,PageHelper插件允许我们自定义COUNT查询SQL,定义方法就是,新增一个select查询语句,查询对应COUNT,查询标签的ID命名为原来的查询语句标签ID + _COUNT,示例如下:
<select id="getUsersList_COUNT" resultType="Long">
  select count(1) from  users
</select>
根据上述方法定义之后,PageHelper插件就会根据我们自定义的COUNT查询SQL进行分页总数的查询了,小编采用下面的方式进行分页。

Page
如果使用的是Page,同样需要我们去定义方法,名字无限制:
<!-- 堆代码 duidaima.com -->
<select id="getUsersList_COUNT" resultType="Long">
  select count(1) from  users
</select>
然后在代码层指定该方法:
page.setCountId("getUsersList_COUNT");
测试

实际开发中,可以通过自定义COUNT查询逻辑来减少不必要的数据加载或表关联,但要注意关联表时要以驱动表为主,并且确保自定义的COUNT查询和实际数据查询使用相同的查询条件。

小编这里是以users表为驱动表,关联了很多附加属性表,所以在统计时除了优化避免二次查询外,还去掉了一些关联的附加属性表(这个是提升大的关键)。
用户评论