mybatis使用分页插件解决慢sql的问题

新项目上线没多久,之前数据量小,后来数据量大了,开始出现分页加载慢,有时还报超时异常,经过排查发现是使用了分页插件的数量统计,造成的,参考此位大佬的文章(Pagehelper分页查询性能优化),然后针对mysql语句有关表连接查询的地方,如果用不到关联表的数据,就跟进参数判断是否联表查询,此问题得到了彻底解决,特此记录

以下为上述链接的内容:(支持原创,如有侵权,请联系本人,本人会妥善处理)   


Pagehelper分页查询性能优化

pageHelper单表分页查询的效率其实是很快的,但是对于多张表join查询可能会导致分页查询效率变慢,主要原因出现在pageHelper在执行分页的过程中是先查询总条数的,每次分页都是执行这个查询总条数的sql,这个过程是非常慢的,不过这个还是取决于数据库中表数据量非常大的情况,像单表数据超过百万条之后,可能会导致查询sql总条数超过1分钟,那么每次分页查询的时间全部都浪费在查询总条数上了,这肯定是不可取的,pageHelper默认是执行当前的查询sql进行查询分页总条数,单论查询数据是很快的

limit 10条或100条都是毫秒级别的

分页查询慢主要原因就出在Pagehelper默认执行当前的查询sql

不过Pagehelper优化之后的好处就是可以手动写查询总条数

在Pagehelper5.0.0以上版本支持手动count查询语句

示例代码:

下面这个是查询分页总条数的sql(报红是因为我IDEA安装mybatis插件的原因),每次查询分页都会执行这条sql不过效率要比默认的快很多,因为它是单表查询总条数的,这样的话效率提高了上百倍,当然这是是实例代码,是禁止select * 的

但是这样写其实要考虑一个问题就是查询的总条数是否与前台展示的真数据是否一致,这是一个问题。

所以说要保证数据条数的一致性,查询sql必须用LEFT JOIN 左连接,否则会导致查询的数据量与手动查询总条数数据量不一致

当然,上面的只是其中我遇到的一种情况,分享给大家,希望能给你们带来帮助

你可能感兴趣的:(mybatis使用分页插件解决慢sql的问题)