oracle count最快的方法,Oracle count哪种写法更快
1)创建测试表
test@CISCOSYS> create table t as select * from dba_objects;
表已创建。
test@CISCOSYS> update t set object_id =rownum ;
已更新50967行。
2)使用count(*)进行统计
test@CISCOSYS> select count(*) from t;
COUNT(*)
----------
50967
已用时间: 00: 00: 00.01
执行计划
----------------------------------------------------------
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 161 (2)| 00:00:02 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 44475 | 161 (2)| 00:00:02 |
-------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls
0 db block gets
764 consistent gets
0 physical reads
0 redo size
410 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
3)使用COUNT(列)进行统计
test@CISCOSYS> select count(*) from t;
COUNT(*)
----------
50967
已用时间: 00: 00: 00.01
执行计划
----------------------------------------------------------
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 161 (2)| 00:00:02 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 44475 | 161 (2)| 00:00:02 |
-------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls
0 db block gets
764 consistent gets
0 physical reads
0 redo size
410 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
解释一下 :物理读为0,是因为创建表的时候,数据已经载入load buffer.
可以使用
test@CISCOSYS> alter system flush buffer_cache;
通过比较COUNT(*) 和Count(列) ,两种情况的COST 是完全一样的。
继续试验!!!
为表创建索引
test@CISCOSYS> create index idx_t_id on t(object_id);
索引已创建。
test@CISCOSYS> alter system flush buffer_cache;
系统已更改。
test@CISCOSYS> select count(*) from t;
COUNT(*)
----------
50967
已用时间: 00: 00: 00.26
执行计划
----------------------------------------------------------
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 161 (2)| 00:00:02 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 44475 | 161 (2)| 00:00:02 |
-------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
5 recursive calls
0 db block gets
765 consistent gets
705 physical reads
0 redo size
410 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
test@CISCOSYS> select count(object_id) from t;
COUNT(OBJECT_ID)
----------------
50967
已用时间: 00: 00: 00.09
执行计划
----------------------------------------------------------
Plan hash value: 3570898368
--------------------------------------------------------------------------------
--
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
--
| 0 | SELECT STATEMENT | | 1 | 13 | 30 (4)| 00:00:01
|
| 1 | SORT AGGREGATE | | 1 | 13 | |
|
| 2 | INDEX FAST FULL SCAN| IDX_T_ID | 44475 | 564K| 30 (4)| 00:00:01
|
--------------------------------------------------------------------------------
--
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls
0 db block gets
181 consistent gets
477 physical reads
0 redo size
418 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
在这里,用COUNT(列)比COUNT(*)要快。通过比较执行计划。可以看出COUNT(*)不能用到索引,而COUNT(列)可以
继续试验!!!
将键值设为非空
test@CISCOSYS> alter table T modify object_id not null;
表已更改。
已用时间: 00: 00: 01.34
test@CISCOSYS> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.01
test@CISCOSYS> select count(*) from t;
COUNT(*)
----------
50967
已用时间: 00: 00: 00.31
执行计划
----------------------------------------------------------
Plan hash value: 3570898368
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 30 (4)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | INDEX FAST FULL SCAN| IDX_T_ID | 44475 | 30 (4)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
205 recursive calls
0 db block gets
213 consistent gets
496 physical reads
0 redo size
410 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
test@CISCOSYS> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.04
test@CISCOSYS> select count(object_id) from t;
COUNT(OBJECT_ID)
----------------
50967
已用时间: 00: 00: 00.20
执行计划
----------------------------------------------------------
Plan hash value: 3570898368
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 30 (4)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | INDEX FAST FULL SCAN| IDX_T_ID | 44475 | 30 (4)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls
0 db block gets
181 consistent gets
477 physical reads
0 redo size
418 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
将一些记录object_id置为null.
test@CISCOSYS> alter table t modify (object_id number null);
表已更改。
test@CISCOSYS> update t set object_id=null where object_id<=10;
已更新10行。
test@CISCOSYS> select count(*) from t;
COUNT(*)
----------
50967
已用时间: 00: 00: 00.00
test@CISCOSYS> select count(object_id) from t;
COUNT(OBJECT_ID)
----------------
50957
发现count(*)和count(列)记录不一样。也就是说,两个功能上根本不是等价的。
如果一个列上存在索引,且非空。 COUNT(*)和COUNT(列)功能相当。
反之,COUNT(*) 和COUNT(列)两者功能本身就功能不同,不应等同对待。
基于案例学SQL
oracle count最快的方法,Oracle count哪种写法更快相关推荐
- 怎么使计算机软件运行快w10,如何使win10系统运行的更快?
微软推出的新操作系统Windows 10越来越受到欢迎,用户越来越多,大家是不是会有这样的感觉:同一款电脑,同样的配置,为什么有的人的电脑用起来非常的流畅,而有的人就连打开个网页都卡的要命:有的人的电 ...
- 浏览器是直接加载二进制图片更快还是加载base64编码的图片更快?
问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键内容,没有改进余地 浏览器是直接加载二进制图片更快还是加载base64编码的图片更快?哪个效率更高? 例如: <img src ...
- oracle索引创建与使用方法,oracle 索引的创建与使用
什么是数据库索引 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快. 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索引是 ...
- oracle中函数怎么使用方法,Oracle中函数的使用
1.decode () 例子:它的写法如下decode('a','b','c','d'),其中a,b,c,d可以是其他函数也可以是数值,依据我们自己的情况来使用,它的含义是如果a=b,那么结果显示c, ...
- nginx内存池大小快内存_使用直接内存时可以更快
nginx内存池大小快内存 总览 使用直接内存不能保证提高性能. 考虑到它增加了复杂性,除非有充分的理由使用它,否则应避免使用它. 塞尔吉奥·奥利维拉(Sergio Oliveira Jr)的这篇出色 ...
- oracle中split的使用方法,Oracle 自定义split 函数实例详解
Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能.比如"abc defg hijkl nmopqr stuvw xy ...
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
先假设有这么一个表: create table S_Depart ( DepartId INT ...
- oracle在分组内排序的方法,oracle 在分组内排序的方法(转载)
oracle分析函数十分强大,我们只要掌握这些方法,更直接的说法就是知道这些分析函数的作用就能完成很多工作. 下边贴出这些函数,及简单应用. 其中我想对lag()和lead()函数坐下说明:lag() ...
- oracle+union+连接,union使用方法 oracle中union的用法
定义了 union var{ uchar tempa[4]; ulong temp3; }; union var longdat小编们利用C语言定义一个简单的Union共用体结构. 你曾经喜欢小编,现 ...
最新文章
- DNA测序技术的发展史之——第一代测序技术
- python3 gzip 压缩/解压
- vim-go开发环境Tagbar插件和NERTree插件安装
- 数据结构源码笔记(C语言):二叉树遍历
- 从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
- 前端笔试能查吗_鹅厂微博前端实习面经
- 多媒体个人计算机软件系统,HP推出新的多媒体个人计算机
- extjs grid显示html,Extjs grid column里添加button等html标签,并增加点击事件
- 坚决不要使用SQL逻辑删除本番环境的数据,降低程序风险
- ethtool 命令输出的注意点--网卡参数
- 创业公司如何做到零成本实现用户快速增长
- 设计模式_单例模式回顾_C#版不使用锁保证多线程安全
- EPS绘图常用快捷键及复杂台阶的画法
- LimeSDR GPS欺骗
- JVM 运行机制及其原理
- 通用技术金工工艺高考必考必看的知识点含攻丝与套丝讲解
- aardio 多线程开发入门
- 联想小新 Pro 16 2023 评测
- android如何获取网络的状态码,Android RxJava+Retrofit网络异常、状态码统一处理
- 618京东物流发大招,中小件完成了大陆地区的区县全面覆盖
热门文章
- angularjs ngTable -Custom filter template-calendar
- 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...
- PV,TPS,QPS,RPS
- php作为弱语言是最棒的~哈哈哈哈
- JS关于提交的RSA加密算法
- 再谈新浪微博架构——视频观后笔记
- 一些实用的Javascript代码
- vue中的mixins怎么用?
- PHP学习之没有权限修改hosts文件
- Java工程师之SpringBoot系列教程前言目录