java springboot 执行sql时间远远大于在客户端执行sql的时间,mybatis 执行时间比纯sql时间长,mybatis sql执行时间明显大于Navicat中执行时间

3 篇文章 0 订阅
2 篇文章 0 订阅

项目框架是spring boot ,mybatis-plus(tk-mybatis)。数据量小,1000条一下的时候没什么问题,但是要测试数据量大之后的接口响应时间,所以程序批量插入了10000条数据,再次通过接口查询数据的时间直接就变成了10秒。

感觉这个时间非常的不正常,因为把程序执行的sql文件拿到客户端执行根本没用到那么多时间,为了排查问题,用了很多方法,最后还是找到了问题的原因。

具体原因如下

mybatis-plus,tk-mybatis在自动分页查询总数的时候,是先把查询数据的sql构建出来,然后再在查询数据的sql外面套一层select count(0) from,比如你查询数据的sql是

select * from user_info where name = 'xiao',那么程序构造出来的查询总数的sql就是:select count(0) from (select * from user_info where name = 'xiao') temp;

这样带来的问题就是,先查询所有数据,不分页的那种查询,然后再在所有数据的基础上查询条数,所以非常慢,我们要分页的目的不就是降低查询时间,避免全表查询吗,框架这么做就完全本末倒置了

总结:数据量小,1000条或者几千条可以使用分页插件来偷懒,但是数据量一旦超过1万,分页查询效率将会大大降低

解决方法,自己手动写分页相关的语句和查询

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值