sql - PL/SQL FETCH NEXT 或 rownum

标签 sql oracle plsql

不多说,应该用什么?他们希望执行相同的任务。

行数?

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

select * from IDENTIFIKATOR 
order by IDENTIFIKATORID 
FETCH NEXT 10 ROWS ONLY;

基数为 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;

而且,它支持 OFFSET 修饰符。

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

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

关于sql - PL/SQL FETCH NEXT 或 rownum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45566519/

相关文章:

oracle - 用于 PL/SQL 开发的 IDE

php - 获取同一列和单个 MySQL 查询中两个单独日期范围的值之和

mysql - MySQL 触发器的多个 if 子句

sql server 阻塞操作符

Java 结果集 : Does the DB only update if updateRow is called?

sql - 为什么 SUM(null) 在 Oracle 中不是 0?

sql - 如何选择所有列以及 Oracle 11g 中 CASE 语句的结果?

java.sql.SQLException : ORA-01403: no data found with OJDBC6

java - UCP工作算法

oracle - 如何在 PL/SQL 中对数字表进行排序?