PL / SQL FETCH NEXT或rownum

时间:2017-08-08 10:59:46

标签: sql oracle plsql

没有详细说明,应该使用什么?他们希望执行相同的任务。

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))

1 个答案:

答案 0 :(得分:3)

如果您使用的是Oracle 12c +,那么我建议您习惯FETCH子句。它是ANSI标准语法,可在其他数据库中使用。此外,它更灵活。例如,你可以这样做:

select i.*
from IDENTIFIKATOR i
order by col2 desc
fetch first 10 rows only;

而且,它支持OFFSET修饰符。

使用rownum执行此操作需要子查询。

另一方面,如果您的代码需要使用早期版本的Oracle,那么rownum基本上是您唯一的选择。