我正在尝试在Oracle中执行以下查询。
select * from (select rownum r, account from fooTable) where r<5001;
选择第1 5000行。我遇到了一个问题,fooTable里面有很多数据,这实际上减缓了查询速度(3500万+行)。根据查询分析器,它正在执行全表扫描。
我的问题是,有没有办法加快这种说法?由于我只获取前N行,是否需要进行全表扫描?
MJ
答案 0 :(得分:3)
我发现/*+ FIRST_ROWS(n) */
提示在这种情况下非常有用(例如限制分页结果)。您可以用您想要的任何值替换n
。
select /*+ FIRST_ROWS(5000) */
account
from fooTable
where rownum <5000;
您仍然需要rownum
谓词来限制行,但提示允许优化器知道您只需要对n
行进行延迟提取。