没有详细说明,应该使用什么?他们希望执行相同的任务。
ROWNUM?
select * from IDENTIFIKATOR
where rownum <= 10;
或取下一个?
select * from IDENTIFIKATOR
FETCH NEXT 10 ROWS ONLY;
进一步的rownum,表面看起来可能会更快
select * from (select * from IDENTIFIKATOR order by IDENTIFIKATORID )
where rownum <= 10;
的基数为10,成本为10(执行时间为0.15-0.2秒(asc vs desc))
select * from IDENTIFIKATOR
order by IDENTIFIKATORID
FETCH NEXT 10 ROWS ONLY;
的基数为10,成本为158869(执行时间为1.9s-2s(asc vs desc))
答案 0 :(得分:3)
如果您使用的是Oracle 12c +,那么我建议您习惯FETCH
子句。它是ANSI标准语法,可在其他数据库中使用。此外,它更灵活。例如,你可以这样做:
select i.*
from IDENTIFIKATOR i
order by col2 desc
fetch first 10 rows only;
而且,它支持OFFSET
修饰符。
使用rownum
执行此操作需要子查询。
另一方面,如果您的代码需要使用早期版本的Oracle,那么rownum
基本上是您唯一的选择。