不多说,应该用什么?他们希望执行相同的任务。
行数?
select * from IDENTIFIKATOR
where rownum <= 10;
Run Code Online (Sandbox Code Playgroud)
或者获取下一个?
select * from IDENTIFIKATOR
FETCH NEXT 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
根据进一步的期望 rownum,表面上看起来可能会更快
select * from (select * from IDENTIFIKATOR order by IDENTIFIKATORID )
where rownum <= 10;
Run Code Online (Sandbox Code Playgroud)
基数为 10,成本为 10(普通执行时间为 0.15-0.2 秒(asc 与 desc))
select * from IDENTIFIKATOR
order by IDENTIFIKATORID
FETCH NEXT 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
基数为 10,成本为 158869(普通执行时间为 1.9s-2s(asc 与 desc))
如果您使用的是 Oracle 12c+,那么我建议您习惯该FETCH子句。它是 ANSI 标准语法,可在其他数据库中使用。另外,它更加灵活。例如,您可以这样做:
select i.*
from IDENTIFIKATOR i
order by col2 desc
fetch first 10 rows only;
Run Code Online (Sandbox Code Playgroud)
并且,它支持OFFSET修饰符。
rownum使用子查询来完成此操作。
另一方面,如果您的代码需要与早期版本的 Oracle 配合使用,那么rownum基本上是您唯一的选择。
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |