oracle rownum 特别慢,select * from table where rownum=1怎么会特别慢??表的数据在千万左右...
援引我的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怎么会特别慢??表的数据在千万左右...相关推荐
- ORACLE ROWNUM用法、select into与insert into区别、merge into的使用、递归查询
ROWNUM用法 ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<. ...
- Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...
- oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...
1.添加字段: alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ; 2.添加备注: comment on ...
- 表间数据复制--SELECT表中的数据插入到新的表中(ORACLE,MSSQL)
表间数据复制--SELECT表中的数据插入到新的表中 --在Oracle 9i中 CREATE TABLE scott.test AS (SELECT DISTINCT empno,ename,hir ...
- oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录
在sql server中可以通过SELECT TOP N来取得想要结果的前几行的信息. 但是在oracle中必须借助伪列rownum来完成 一个查询语句在取得结果集后,伪列rownum就会从1开始,从 ...
- Oracle中insert into select和select into的区别
文章转自:http://www.linuxidc.com/Linux/2012-09/70984.htm 在Oracle中,将一张表的数据复制到另外一个对象中.通常会有这两种方法:insert int ...
- oracle full table scan,ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN
ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN TABLE FULL SCAN 全表扫描,表示表中所有记录都被访问到.如果表很大, 该操作对查询性 ...
- 【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的时候出现如上报错,表示我们的表空间已经不足了. 如何查看 ...
- oracle查询语句中select from where group by having order by的解释与应用
oracle查询语句中select from where group by having order by的解释与应用 查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from- ...
最新文章
- 心得体悟帖---15、我的灵魂
- VTK:Medical之MedicalDemo4
- im2col原理小结
- java 单例 实现_java 实现单例的各种方式
- tomcat启动时SecureRandom耗时
- cw2vec:蚂蚁金服公开最新基于笔画的中文词向量算法
- Python中MD5加密
- linux的文件系统简单介绍
- 7 行为型模式之 - 状态模式
- 计算机操作系统笔记(六)
- Mybatis常见的面试题
- 安装无奈7和Linux,linux7安装teamViewer
- scp+oracle备份
- 程序员应该选择干前端还是干后端呢?
- ubuntu14.04下推荐的工具及插件
- htmltestrunner解决错误日志出界问题
- cisco 3548x 低延时交换机erspan获取ns时间戳
- 怎样备份iOS已安装、已下架App的IPA文件?
- 那些解释起来很蛋疼的IT工种
- 俞军PM12条军规+产品决策简单三步法
热门文章
- 利用python爬虫(part7)--初识Xpath之Node节点
- SAP Spartacus 项目执行 yarn build --stats-json 遇到的一些错误消息
- 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 试读版
- Angular 开发里的 polyfills.js、runtime.js、styles.js 和 vendor.js 是用来做什么的
- ABAP 的历史,现在,和未来的讨论
- 如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控
- SAP Commerce Cloud portal 的 deployment
- SAP 3D visual enterprise viewer 9.0 的下载方式
- ng-content和@ContentChild的配合用法
- Angular Component的默认changeDetection策略