5

我想知道以下哪一项在执行 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 方法是否会随着页码的增加而变慢,因为需要跳过更多行?

4

1 回答 1

2

通常,JDBC 驱动程序必须通过网络获取前 20 行,因此这通常比编写分页查询效率低。随着您获取更多页面,该惩罚将变得更大。

通常,当您获取后续页面时,这两种方法都会变慢。但这通常不是问题——如果您对结果进行分页,这意味着用户在放弃之前实际上不会获取超过几页的结果。

于 2012-07-12T01:58:50.067 回答