援引我的blog的一篇文章。

这是一篇改写的文章,原文来自

http://www.db-nemec.com/Selecting_ROWNUM_1.html ,我只是结合我的实验重述,如果大家有时间,可以看看原文。

如果想判断一个表中是否有数据,最简单的方法是:

SELECT count(*) FROM test WHERE ROWNUM = 1;

正常情况下它的执行计划如下:

SQL> select count(*) from TEST where rownum = 1;

Elapsed: 00:00:00.00

Execution Plan

----------------------------------------------------------

0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=40145 Card=1)

1    0   SORT (AGGREGATE)

2    1     COUNT (STOPKEY)

3    2       PARTITION RANGE (ALL) (Cost=40145 Card=7639515)

4    3         TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=40145 Card=7639515)

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

4  consistent gets

0  physical reads

0  redo size

379  bytes sent via SQL*Net to client

504  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

4个LIO是能够接受的。

如果你发现就这么简单的语句执行特别慢,查看执行计划如下:

SQL> select count(*) from TEST where rownum = 1;

Elapsed: 00:00:19.05

Execution Plan

----------------------------------------------------------

0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=21562 Card=1)

1    0   SORT (AGGREGATE)

2    1     COUNT (STOPKEY)

3    2       PX COORDINATOR

4    3         PX SEND* (QC (RANDOM)) OF ':TQ10000' (Cost=21562 Card=7639515)        :Q1000

5    4           PX BLOCK* (ITERATOR) (Cost=21562 Card=7639515)                       :Q1000

6    5             TABLE ACCESS* (FULL) OF 'TEST' (TABLE) (Cost=21562 Card=7639515)   :Q1000

4 PARALLEL_TO_SERIAL

5 PARALLEL_COMBINED_WITH_CHILD

6 PARALLEL_COMBINED_WITH_PARENT

Statistics

----------------------------------------------------------

217  recursive calls

3  db block gets

100678  consistent gets

100260  physical reads

668  redo size

379  bytes sent via SQL*Net to client

504  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

10  sorts (memory)

0  sorts (disk)

1  rows processed

这是怎么回事呢?

在9i和10g中,如果对分区表执行count(*),而且表的degree 大于1,就会出现这种问题,如果把degree恢复为1,问题就能解决。

alter table TEST parallel (degree 1);

看来简单的增大并行度,也很可能会出现一些问题。ORACLE还有很多需要你去学习。

oracle rownum 特别慢,select * from table where rownum=1怎么会特别慢??表的数据在千万左右...相关推荐

  1. ORACLE ROWNUM用法、select into与insert into区别、merge into的使用、递归查询

    ROWNUM用法 ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<. ...

  2. Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作

    Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  3. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  4. 表间数据复制--SELECT表中的数据插入到新的表中(ORACLE,MSSQL)

    表间数据复制--SELECT表中的数据插入到新的表中 --在Oracle 9i中 CREATE TABLE scott.test AS (SELECT DISTINCT empno,ename,hir ...

  5. oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录

    在sql server中可以通过SELECT TOP N来取得想要结果的前几行的信息. 但是在oracle中必须借助伪列rownum来完成 一个查询语句在取得结果集后,伪列rownum就会从1开始,从 ...

  6. Oracle中insert into select和select into的区别

    文章转自:http://www.linuxidc.com/Linux/2012-09/70984.htm 在Oracle中,将一张表的数据复制到另外一个对象中.通常会有这两种方法:insert int ...

  7. oracle full table scan,ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN

    ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN TABLE FULL SCAN 全表扫描,表示表中所有记录都被访问到.如果表很大, 该操作对查询性 ...

  8. 【ORACLE】ORA-01653: unable to extend table XXXX by 128 in tablespace XXX

    ORA-01653: unable to extend table XXXX by 128 in tablespace XXX 一次运行sql的时候出现如上报错,表示我们的表空间已经不足了. 如何查看 ...

  9. oracle查询语句中select from where group by having order by的解释与应用

    oracle查询语句中select from where group by having order by的解释与应用 查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from- ...

最新文章

  1. 心得体悟帖---15、我的灵魂
  2. VTK:Medical之MedicalDemo4
  3. im2col原理小结
  4. java 单例 实现_java 实现单例的各种方式
  5. tomcat启动时SecureRandom耗时
  6. cw2vec:蚂蚁金服公开最新基于笔画的中文词向量算法
  7. Python中MD5加密
  8. linux的文件系统简单介绍
  9. 7 行为型模式之 - 状态模式
  10. 计算机操作系统笔记(六)
  11. Mybatis常见的面试题
  12. 安装无奈7和Linux,linux7安装teamViewer
  13. scp+oracle备份
  14. 程序员应该选择干前端还是干后端呢?
  15. ubuntu14.04下推荐的工具及插件
  16. htmltestrunner解决错误日志出界问题
  17. cisco 3548x 低延时交换机erspan获取ns时间戳
  18. 怎样备份iOS已安装、已下架App的IPA文件?
  19. 那些解释起来很蛋疼的IT工种
  20. 俞军PM12条军规+产品决策简单三步法

热门文章

  1. 利用python爬虫(part7)--初识Xpath之Node节点
  2. SAP Spartacus 项目执行 yarn build --stats-json 遇到的一些错误消息
  3. 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 试读版
  4. Angular 开发里的 polyfills.js、runtime.js、styles.js 和 vendor.js 是用来做什么的
  5. ABAP 的历史,现在,和未来的讨论
  6. 如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控
  7. SAP Commerce Cloud portal 的 deployment
  8. SAP 3D visual enterprise viewer 9.0 的下载方式
  9. ng-content和@ContentChild的配合用法
  10. Angular Component的默认changeDetection策略