使用rownum和嵌套子查询的MyBatis RowBounds与Oracle分页查询

sam*_*nta 5 sql oracle ibatis jdbc mybatis

我想知道以下哪个在使用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;
Run Code Online (Sandbox Code Playgroud)

2)使用MyBatis RowBounds进行分页.

MyBatis RowBounds使用普通的JDBC,在触发select之后,它会跳过前20个记录,然后获取接下来的30个(pagesize).

此外,随着页面数量的增加,MyBatis方法会变慢,因为需要跳过更多行吗?

Jus*_*ave 2

一般来说,JDBC 驱动程序必须通过网络获取前 20 行,因此这通常比编写分页查询效率低。当您获取更多页面时,这种惩罚会变得更大。

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