深分页优化
分页查询有一个问题,在表的数据量很大的情况下,如果分页区间太靠后 (即offset太大),会引起性能问题。
因此,Jimmer支持深分页优化,为分页查询的offset设置一个阈值offset-optimizing-hreshold,一旦offset达到这个阈值,改变分页查询的实现方式。
设置阈值
-
使用Spring Boot Starter
修改
application.yml(或application.properties),添加配置项目offset-optimizing-hreshold,如下jimmer:
offset-optimizing-hreshold: 1000 -
使用底层API
- Java
- Kotlin
JSqlClient sqlClient = JSqlClient
.newBuilder()
.setOffsetOptimizingThreshold(1000)
...省略其他配置...
.build();val sqlClient = newKSqlClient {
setOffsetOptimizingThreshold(1000)
...省略其他配置...
}
信息
如果不设置这个阈值,其默认值为Integer.MAX_VALUE,这表示没有分页查询可以启用该功能。
效用
讨论此功能无需count-query,关注于data-query即可。让我们来看这个简单的分页查询
- Java
- Kotlin
public List<Book> findBooks(int limit, int offset) {
BookTable table = Tables.BOOK_TABLE;
return sqlClient
.createQuery(table)
.select(table)
.limit(limit, offset)
.execute();
}
fun findBooks(limit: Int, offset: Int): List<Book> =
sqlClient.createQuery(Book::class) {
select(table)
}
.limit(limit, offset)
.execute()