我想知道以下哪个在使用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,在触发选择后,它会跳过前20个记录,然后提取下一个30(pagesize)。
此外,随着页码数量的增加,MyBatis方法会变慢,因为需要跳过更多行吗?
答案 0 :(得分:2)
通常,JDBC驱动程序必须通过网络获取前20行,因此通常效率低于编写分页查询。当您获取更多页面时,这种惩罚会变得更大。
通常,在您获取后续页面时,这两种方法都会变慢。但这通常不是问题 - 如果你是分页结果,这意味着用户在放弃之前不会实际获取超过几页的结果。