繁体   English   中英

使用 JOOQ 进行分页

[英]pagination with JOOQ

我正在尝试使用 JOOQ 对来自 Mysql 数据库的结果进行分页,我想请求我的 MySQL 数据库以获得特定的偏移量。

我的客户请求具有不同偏移量的不同大小的结果,而我的服务是无状态的。

我不想使用限制和偏移,因为我知道它们的性能很差。

    public void fetch() {
    Cursor<Record> cursor = null;

    String query = "books WHERE type = 'KIDS'";


    try {
        cursor = create.selectFrom(query).fetchLazy();

        while (cursor.hasNext()) {
            Record book = cursor.fetchNext();
        }
    }
    finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

如何从第 5 页或第 1000 到 1100 本书开始?

最好的问候, 马坦

性能方面, LIMIT没有任何问题。 确实, OFFSET会导致性能问题,因为从OFFSET跳过的行必须由数据库服务器处理,就像您实际获取它们一样,除了不必通过网络传输它们。

话虽如此,您尝试在 Java 客户端中实现OFFSET的方法比在 SQL 中实现它要糟糕得多。 您(至少)在服务器端执行相同数量的工作,同时将更多数据传输到客户端只是为了再次丢弃它。 只需使用OFFSET ,在这种情况下,如果您必须分页到第 5 页。

一种更快的分页方法是键集分页,jOOQ 通过SEEK子句支持它 这是一种不同类型的分页,它不允许很容易地跳转到第 5 页,只能跳转到“下一页”(例如 Twitter 时间线)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM