mybatis-plus框架分页导致的SQL过慢优化

程序内执行查询SQL比Navicat执行查询SQL过慢优化

前言

最近做了两个项目的查询接口优化,在大数据量并且已优化过SQL的情况下,程序执行查询SQL比Navicat执行SQL的效率。

  • 项目A:springboot 1.5.9 + mybatis-plus2.3.1
  • 项目B:springboot 2.2.0 + mybatis-plus2.3.1

问题

两个项目的问题都出在了框架分页查询总记录数的自动生成的SQL上,导致了接口整体查询效率变慢。这个语句是在我们的查询语句的基础上嵌套一层。
例如:

SELECT COUNT(*) FROM (我们的查询SQL)

优化

第一种方式:

1、引入pagehelper分页插件,5.0.4版本以后增加手写 count 查询支持

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
</dependency>

2、在mybatis-plus配置启用手写 count 查询支持

3、在xml文件添加查询count的语句。注意:需自行保证查询准确性。

4、分页插件的使用,如下:

第二种优化方式:

1、将mybatis-plus框架升级到3.0.7版本以上

<!-- mybatis-plus start -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.4.0</version>
</dependency>
<!-- mybatis-plus end -->

2、关闭COUNT查询与优化器,手动查询COUNT并写入。

优化后效果

总结

  • 项目A使用第一种方式优化。
  • 项目B使用第二种方式优化。

资料


版权声明:本文为qq_35824259原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。