我想检索已从 Oracle 数据库中的表中更新的最后 20 行,而不使用 order by then rownum 函数,例如
select *
from EMP
order by last_Updated
where rownum < 20
这个查询需要很多时间。
您发布的查询没有按照您的想法执行。该查询将获取 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 行。如果您对此查询的性能有疑问,您将获得什么样的查询计划?
尝试改用 Rownum() 并按 update_date desc 排序 where rownum() <=20...