在开发过程中,我们少不了用到分页,我最习惯的分页是用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的偏移量必然增大 ,不可避免的,查询的时间就会呈几何倍数增长。
所以大数据量下就不要用了!