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

3.5.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

mysql 查询分页,如果查询到最后一页可能会导致查询变慢. 例如一张表中一共有95条数据(实际数据量会很大),如果分页为10的话,limit 90, 10 就会很慢,但是 limit 90 ,5 的话效率就会变高 想知道未来会不会做这种场景的优化 包括现有情况如何解决,目前是重写PaginationInnerInterceptor

    DialectModel model = dialect.buildPaginationSql(buildSql, page.offset(), page.getSize());

修改掉page.getSize()这个地方的传参,来实现,想知道开发着有没有什么更好的办法或者入口来解决这种问题

重现步骤(如果有就写完整)

报错信息

Comment From: StormSpiritZipZap

现在的做法是在 beforeQuery 这里重新计算了一下 limit long limit = Long.min(page.getTotal() - page.offset(), page.getSize()); DialectModel model = dialect.buildPaginationSql(buildSql, page.offset(), limit);

Comment From: amosnothing

这个做法也可能会慢,你刚好查总数是 95,如果此时,刚好数据变成 94 了。

Comment From: StormSpiritZipZap

这个做法也可能会慢,你刚好查总数是 95,如果此时,刚好数据变成 94 了。

总的来说这个问题确实存在,但起码在数据条数不变的情况下,还是能快一点的,在分页的两个查询中间发生了条数的变化,几率还是偏小的

Comment From: qmdx

现在的做法是在 beforeQuery 这里重新计算了一下 limit long limit = Long.min(page.getTotal() - page.offset(), page.getSize()); DialectModel model = dialect.buildPaginationSql(buildSql, page.offset(), limit);

你这个做法也是错的,因为数据库的数据是动态增长的,你人为 10 减少为 5 如果正好其他人插入了多条数据那么与实际不符,这样不就引入新的 bug 这个问题应该是数据库本身该解决的问题。