第一行VS下一行VS rownum

时间:2018-10-22 14:46:11

标签: oracle

这3个查询返回相同的结果集,但使用2种不同的技术。使用一个相对于另一个有优势吗?计划和执行时间在相同的成本范围内。

Select * 
from user_tab_columns
order  by   data_length desc,table_name, column_name  
fetch first 5 rows only  
Select * 
from user_tab_columns
order  by  data_length desc,table_name, column_name  
fetch next 5 rows only  
select * 
from (
  Select * 
  from user_tab_columns
  order  by  data_length desc,table_name, column_name  
)  
where  rownum <=5  

1 个答案:

答案 0 :(得分:1)

first子句中使用的关键字nextfetch是彼此的完美替代,它们可以互换使用-在文档中有明确说明。因此,您实际上只有两个查询,而不是三个。 (前两个是完全相同的。)

第一个查询比最后一个查询容易编写和维护。另一方面,它仅在Oracle 12.1和更高版本中可用。在Oracle 11.2和更早版本中,唯一的选择是您的最后一个查询。

fetch子句更加灵活,例如,它允许您指定with ties(如果将具有rownum 4、5、6和7的行绑在{{ 1}}标准)。