首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle中的where rownum=1查询耗时

Oracle中的where rownum=1查询耗时
EN

Stack Overflow用户
提问于 2011-03-15 11:18:27
回答 6查看 12.4K关注 0票数 2

我正在尝试执行查询,如下所示

代码语言:javascript
复制
select * from tableName where rownum=1

这个查询基本上是获取table.There的列名,在table.When中有超过百万条记录,我把上面的条件放在上面,它花了这么多的时间来获取第一个row.Is,还有任何替代方法来获取第一行。

EN

Stack Overflow用户

发布于 2011-03-15 21:12:33

这个问题已经回答了,我只会解释为什么有时filter ROWNUM=1或ROWNUM <= 1可能会导致很长的响应时间。

当遇到ROWNUM筛选器(在单个表上)时,优化器将使用COUNT STOPKEY生成完全扫描。这意味着Oracle将开始读取行,直到遇到前N行(这里是N=1)。完全扫描读取从第一个范围到高水位线的数据块。Oracle无法预先确定哪些块包含行,哪些块不包含行,因此所有块都将被读取,直到找到N行。如果第一个块是空的,可能会导致多次读取。

请考虑以下几点:

代码语言:javascript
复制
SQL> /* rows will take a lot of space because of the CHAR column */
SQL> create table example (id number, fill char(2000));

Table created

SQL> insert into example 
  2     select rownum, 'x' from all_objects where rownum <= 100000;

100000 rows inserted

SQL> commit;

Commit complete

SQL> delete from example where id <= 99000;

99000 rows deleted

SQL> set timing on
SQL> set autotrace traceonly
SQL> select * from example where rownum = 1;

Elapsed: 00:00:05.01

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=1 Bytes=2015)    
   1    0   COUNT (STOPKEY)
   2    1     TABLE ACCESS (FULL) OF 'EXAMPLE' (TABLE) (Cost=7 Card=1588 [..])

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      33211  consistent gets
      25901  physical reads
          0  redo size
       2237  bytes sent via SQL*Net to client
        278  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

正如您所看到的,一致gets的数量非常高(对于单行)。在某些情况下可能会遇到这种情况,例如,您使用/*+APPEND*/提示插入行(因此高于高水位线),并且还定期删除最旧的行,从而导致在段的开头有大量空白空间。

票数 12
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5307152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档