作者zelkova (*〞︶〝*)
看板java
标题[问题] LIMIT和ResultSet的问题 (Oracle DB)
时间Thu Aug 10 18:55:40 2017
因为 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笔资料,这样是不是可以接受?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.45.91
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1502362544.A.4D6.html
※ zelkova:转录至看板 Database 08/10 18:56
1F:推 b92310051: 直接从sql下手就好了吧 >10000and <=10300不好吗? 08/11 20:49
2F:→ adrianshum: Oracle 就 select * from (select xxx from yyy order 08/11 22:00
3F:→ adrianshum: by zzz) where rownum > 10000 and rownum <= 10300 08/11 22:00
4F:→ ssccg: 不就原po的方法1? 08/12 10:37
5F:推 swpoker: 这样不知道耗多少的传输 08/15 00:12
6F:→ adrianshum: Ssccg: 不是。原post 说在子查询先限制100300 行。这 09/11 19:20
7F:→ adrianshum: 做法不行。 09/11 19:20