项目框架是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万,分页查询效率将会大大降低

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐