我想检索已从Oracle数据库中的表更新的最后20行,而不使用order by 然后是rownum函数,如
select *
from EMP
order by last_Updated
where rownum < 20
此查询需要花费大量时间。
答案 0 :(得分: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行。如果您遇到此查询的性能问题,您会得到什么样的查询计划?
答案 1 :(得分:1)
尝试使用Rownum()并按update_date desc排序,其中rownum()&lt; = 20 ...