大数据量mybatis分页插件page Helper效率问题


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

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

写的sql原本是这样

select * from account where age >= 18;

 

最后执行的时候是这样

select * fromselect * from account where age >= 18where 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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM