【转帖】大数据量mybatis分页插件Page Helper效率问题

在开发过程中,我们少不了用到分页,我最习惯的分页是用limit来分页。由于之前的时候写的项目数据量并不大,所以用的是pageHelper这个插件来分页的。以前也没有什么感觉,近期做的项目数据量有点大,越来越感觉sql效率不够,就看了一下它的基本工作原理。

当然,技术不到家,查看api什么的也看不太懂,就打印了一下最终执行的sql语句。对比之后发现是limit的偏移量问题导致的sql效率低下

写的sql原本是这样

select * from account where age >= 18;

最后执行的时候是这样

select * from (select * from account where age >= 18)where limit 100,10;

也就是说,用pageHelper插件的时候,它会拦截我们写的sql语句,自己重新包装一层,在后面添加limit。这在数据量小的时候当然是没有什么问题的,但是一旦数据量过大,那分页到后面数据时候limti的偏移量必然增大 ,不可避免的,查询的时间就会呈几何倍数增长。

我们可以换一种分页方式,缓解一下这种情况

子查询的分页方式:

SELECT * FROM account WHERE id >= (SELECT id FROM account WHERE age = 18 ORDER BY id LIMIT 10000, 1) LIMIT 10



JOIN分页方式
SELECT * FROM account a JOIN (select id from account limit 10000, 10) b ON a.ID = b.id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值