在没有全表扫描的情况下在oracle中选择第一行

时间:2014-07-01 12:59:58

标签: sql oracle

我正在尝试在Oracle中执行以下查询。

select * from (select rownum r, account from fooTable) where r<5001;

选择第1 5000行。我遇到了一个问题,fooTable里面有很多数据,这实际上减缓了查询速度(3500万+行)。根据查询分析器,它正在执行全表扫描。

我的问题是,有没有办法加快这种说法?由于我只获取前N行,是否需要进行全表扫描?

MJ

1 个答案:

答案 0 :(得分:3)

我发现/*+ FIRST_ROWS(n) */提示在这种情况下非常有用(例如限制分页结果)。您可以用您想要的任何值替换n

select /*+ FIRST_ROWS(5000) */
  account 
from fooTable
where rownum <5000;

您仍然需要rownum谓词来限制行,但提示允许优化器知道您只需要对n行进行延迟提取。