Sql 在oracle中选择第一行而不进行完全表扫描
我试图在Oracle中执行以下查询Sql 在oracle中选择第一行而不进行完全表扫描,sql,oracle,Sql,Oracle,我试图在Oracle中执行以下查询 select * from (select rownum r, account from fooTable) where r<5001; 它选择前5000行。我遇到了一个问题,fooTable中有很多数据,这实际上减慢了3500多万行的查询速度。根据查询分析器,它正在执行完整的表扫描 我的问题是,有没有办法加速这一说法?由于我只获取前N行,是否需要进行完整的表扫描 mj我发现/*+FIRST_ROWSn*/提示在类似这样的情况下非常有用,例如限制分页结
select * from (select rownum r, account from fooTable) where r<5001;
它选择前5000行。我遇到了一个问题,fooTable中有很多数据,这实际上减慢了3500多万行的查询速度。根据查询分析器,它正在执行完整的表扫描
我的问题是,有没有办法加速这一说法?由于我只获取前N行,是否需要进行完整的表扫描
mj我发现/*+FIRST_ROWSn*/提示在类似这样的情况下非常有用,例如限制分页结果。你可以用你想要的值替换n
select /*+ FIRST_ROWS(5000) */
account
from fooTable
where rownum <5000;
您仍然需要rownum谓词来限制行,但是提示让优化器知道您只需要延迟获取n行。我发现/*+FIRST_ROWSn*/hint在这种情况下非常有用,例如限制分页结果。你可以用你想要的值替换n
select /*+ FIRST_ROWS(5000) */
account
from fooTable
where rownum <5000;
您仍然需要rownum谓词来限制行,但提示让优化器知道您只需要延迟获取n行。在子查询中放入where子句。是的,完整表扫描正是执行此查询的最佳和最快的方法,它实际上不会执行表的完整扫描,它将扫描表的前5000行。这是您的精确查询,还是您真正的查询中有联接,还是ORDER BY子句,或者其他一些我们看不到的内容?请将表想象成一本书。如果只想查找引用了X的页面,请在索引中查找X。如果您想阅读这本书的前50页,那么-只需完整地阅读前50页如果您有选择,那么您可能希望在子查询中使用ORDERBY子句。where子句中列上的索引可能会提高查询性能。在子查询中放置where子句。是的,完整表扫描正是执行此查询的最佳和最快方法。它实际上不会执行表的完整扫描,它将扫描表的前5000行。这是您的精确查询,还是您的实际查询中包含联接,或者订单条款,或者其他一些我们看不到的东西?想象一下像书一样的桌子。如果只想查找引用了X的页面,请在索引中查找X。如果您想阅读这本书的前50页,那么-只需完整地阅读前50页如果您有选择,那么您可能希望在子查询中使用ORDERBY子句。where子句中列上的索引可以提高查询性能。