我想知道以下哪一项在执行 100k+ 记录查询的时间方面表现更好
1)Oracle的分页
SELECT *
FROM (
SELECT id, col1, col2, rownum rn
FROM (
SELECT /*+ first_rows(50) */ id, col1, col2
FROM table1
ORDER BY id DESC
)
WHERE rownum <= 50
)
WHERE rn >= 20;
2) 使用 MyBatis RowBounds 进行分页 .
MyBatis RowBounds 使用普通的 JDBC,在触发 select 后它会跳过前 20 条记录,然后获取接下来的 30 条(页面大小)。
另外,随着页数的增加,MyBatis 方法会随着需要跳过更多行而变慢吗?
最佳答案
通常,JDBC 驱动程序必须通过网络获取前 20 行,因此这通常比编写分页查询效率低。随着您获取更多页面,这种惩罚会越来越大。
通常,当您获取后续页面时,这两种方法都会变慢。但这通常不是问题——如果您正在对结果进行分页,这意味着用户在放弃之前不会实际获取超过几页的结果。
关于sql - MyBatis RowBounds vs Oracle 分页查询使用 rownum 和嵌套子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11185705/