Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在oracle中选择第一行而不进行完全表扫描_Sql_Oracle - Fatal编程技术网

Sql 在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*/提示在类似这样的情况下非常有用,例如限制分页结

我试图在Oracle中执行以下查询

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子句中列上的索引可以提高查询性能。