sql - MyBatis RowBounds vs Oracle 分页查询使用 rownum 和嵌套子查询

标签 sql oracle jdbc ibatis 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;

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/

相关文章:

php - 选择 future 14 天内的日期范围

sql-server - SSIS包: convert between unicode and non-unicode string data types

oracle - 使用 Oracle 客户端 11 部署 .NET 应用程序所需的最低设置是什么?

php - 如果字段不存在,则SQL插入行

sql - 计数除以 0

sql - 可视化mysql解释的工具

mysql - 是否有通用的解决方法来表达 Oracle(和 MySQL)中的派生列列表?

java - 是否可以使用 JDBC 作为 RDBMS 的抽象层?

java - Tomcat:将 session 存储在数据库中

jdbc - 在 SQuirrel-sql 中调试 SQL 查询