程序内执行查询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使用第二种方式优化。
资料
- mybatis-plus
- PageHelper