我想从按日期排序的Oracle表中获取前N行.
执行此操作的常用方法,此解决方案返回我在SO/google上可以找到的每个问题.
Select *
from
(select * from
myTable
ordered by Date desc)
where rownum < N
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这个解决方案是不切实际的,因为myTable包含大量的行,这会导致Oracle花费太长时间来返回子查询中的所有行.
问题是,有没有办法限制子查询中返回的ORDERED行数?
Ton*_*ews 12
您推断Oracle必须在过滤掉前N个之前返回子查询中的所有行是错误的.它将从子查询开始获取行,并在返回N行时停止.
话虽如此,可能是Oracle需要从表中选择所有行并在它们开始返回之前对它们进行排序.但是如果在ORDER BY子句中使用了列的索引,则可能不会.
Oracle与任何其他DBMS处于相同的位置:如果您有一个没有索引的大型表,那么在没有先获取所有行并对它们进行排序的情况下,它怎么可能知道哪些行是前N个?