0

我想检索已从 Oracle 数据库中的表中更新的最后 20 行,而不使用 order by then rownum 函数,例如

select * 
  from EMP 
 order by last_Updated 
 where rownum < 20

这个查询需要很多时间。

4

2 回答 2

3

您发布的查询没有按照您的想法执行。该查询将获取 20 个任意行,然后按last_updated列排序。如果您想要最近的 20 行,则需要ORDER BY last_updated在嵌套查询中,然后rownum在外部查询中应用谓词。

SELECT *
  FROM (SELECT *
          FROM emp
         ORDER BY last_updated desc)
 WHERE rownum <= 20

假设它last_updated被索引,那应该是一个非常有效的查询。您应该能够对last_updated索引进行最小/最大扫描,然后count stopkey只获取前 20 行。如果您对此查询的性能有疑问,您将获得什么样的查询计划?

于 2013-02-05T15:31:39.420 回答
1

尝试改用 Rownum() 并按 update_date desc 排序 where rownum() <=20...

于 2013-02-05T15:30:06.687 回答