[问题] LIMIT和ResultSet的问题 (Oracle DB)

楼主: zelkova (*〞︶〝*)   2017-08-10 18:55:40
因为 OracleDB 没有 LIMIT OFFSET 之类的用法,
假设我们要取第100000笔之后的300笔资料,
目前有看到有看到几种模拟 LIMIT的方法,像是:
1. 子查询先用 ROWNUM 将每笔编号直到100300号
然后父查询再取出编号大于100000的
2. 第一次查询用 ROWNUM 限制100300笔
第二次查询用 ROWNUM 限制100000笔
将两次查询结果相减(MINUS)
之类的解法,
(因为 DB 用 ORDER BY 会非常慢,类似解法省略)
看起来好像都没有显著差异,时间看起来没比较快
我在想直接 executeQuery(sql)
将返回的 ResultSet rs.next() 重复100000次
然后取后面的300笔资料,这样是不是可以接受?
作者: b92310051 (蛤利)   2017-08-11 20:49:00
直接从sql下手就好了吧 >10000and <=10300不好吗?
作者: adrianshum (Alien)   2017-08-11 22:00:00
Oracle 就 select * from (select xxx from yyy orderby zzz) where rownum > 10000 and rownum <= 10300
作者: ssccg (23)   2017-08-12 10:37:00
不就原po的方法1?
作者: swpoker (swpoker)   2017-08-15 00:12:00
这样不知道耗多少的传输
作者: adrianshum (Alien)   2017-09-11 19:20:00
Ssccg: 不是。原post 说在子查询先限制100300 行。这做法不行。

Links booklink

Contact Us: admin [ a t ] ucptt.com