当前使用版本(必须填写清楚,否则不予处理)

2.3

重现步骤

每页size=10 分页到最后一页时,当数据不足10条,仍然使用limit offset,10查询的话,会导致查询速度变慢。

原因

因为如果符合条件的数据足够多,则limit1000的过程就是,从符合条件的第一条数据开始往后查,当查够1000条数据,则立刻返回。 如果符合条件的数据不够,则会从符合条件的第一条数据开始往后扫描,一条条的查,直到把整个表扫描完仍然不够1000条,才会返回结果(不够1000条)。

解决方法

  • 重写Page类的getSize方法
@Override
public int getSize() {
    long total = super.getTotal();
    int size = super.getSize();
    int offset = PageHelper.offsetCurrent(super.getCurrent(), size);
    long remainRowSize = total - offset;

    size = remainRowSize > size ? size : (int) remainRowSize;
    return size;
}
  • 以上是我的临时解决方法,不知道作者大大可不可以针对这个做个优化。或者有更好的解决方案,烦请指教

Comment From: amosnothing

这个问题有人跟进了吗?问题还在,还是说不处理呢