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哪种写法更快相关推荐

  1. 怎么使计算机软件运行快w10,如何使win10系统运行的更快?

    微软推出的新操作系统Windows 10越来越受到欢迎,用户越来越多,大家是不是会有这样的感觉:同一款电脑,同样的配置,为什么有的人的电脑用起来非常的流畅,而有的人就连打开个网页都卡的要命:有的人的电 ...

  2. 浏览器是直接加载二进制图片更快还是加载base64编码的图片更快?

    问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键内容,没有改进余地 浏览器是直接加载二进制图片更快还是加载base64编码的图片更快?哪个效率更高? 例如: <img src ...

  3. oracle索引创建与使用方法,oracle 索引的创建与使用

    什么是数据库索引 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快. 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索引是 ...

  4. oracle中函数怎么使用方法,Oracle中函数的使用

    1.decode () 例子:它的写法如下decode('a','b','c','d'),其中a,b,c,d可以是其他函数也可以是数值,依据我们自己的情况来使用,它的含义是如果a=b,那么结果显示c, ...

  5. nginx内存池大小快内存_使用直接内存时可以更快

    nginx内存池大小快内存 总览 使用直接内存不能保证提高性能. 考虑到它增加了复杂性,除非有充分的理由使用它,否则应避免使用它. 塞尔吉奥·奥利维拉(Sergio Oliveira Jr)的这篇出色 ...

  6. oracle中split的使用方法,Oracle 自定义split 函数实例详解

    Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能.比如"abc defg  hijkl   nmopqr     stuvw  xy ...

  7. Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    先假设有这么一个表:   create table S_Depart    (       DepartId                         INT                   ...

  8. oracle在分组内排序的方法,oracle 在分组内排序的方法(转载)

    oracle分析函数十分强大,我们只要掌握这些方法,更直接的说法就是知道这些分析函数的作用就能完成很多工作. 下边贴出这些函数,及简单应用. 其中我想对lag()和lead()函数坐下说明:lag() ...

  9. oracle+union+连接,union使用方法 oracle中union的用法

    定义了 union var{ uchar tempa[4]; ulong temp3; }; union var longdat小编们利用C语言定义一个简单的Union共用体结构. 你曾经喜欢小编,现 ...

最新文章

  1. DNA测序技术的发展史之——第一代测序技术
  2. python3 gzip 压缩/解压
  3. vim-go开发环境Tagbar插件和NERTree插件安装
  4. 数据结构源码笔记(C语言):二叉树遍历
  5. 从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
  6. 前端笔试能查吗_鹅厂微博前端实习面经
  7. 多媒体个人计算机软件系统,HP推出新的多媒体个人计算机
  8. extjs grid显示html,Extjs grid column里添加button等html标签,并增加点击事件
  9. 坚决不要使用SQL逻辑删除本番环境的数据,降低程序风险
  10. ethtool 命令输出的注意点--网卡参数
  11. 创业公司如何做到零成本实现用户快速增长
  12. 设计模式_单例模式回顾_C#版不使用锁保证多线程安全
  13. EPS绘图常用快捷键及复杂台阶的画法
  14. LimeSDR GPS欺骗
  15. JVM 运行机制及其原理
  16. 通用技术金工工艺高考必考必看的知识点含攻丝与套丝讲解
  17. aardio 多线程开发入门
  18. 联想小新 Pro 16 2023 评测
  19. android如何获取网络的状态码,Android RxJava+Retrofit网络异常、状态码统一处理
  20. 618京东物流发大招,中小件完成了大陆地区的区县全面覆盖

热门文章

  1. angularjs ngTable -Custom filter template-calendar
  2. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...
  3. PV,TPS,QPS,RPS
  4. php作为弱语言是最棒的~哈哈哈哈
  5. JS关于提交的RSA加密算法
  6. 再谈新浪微博架构——视频观后笔记
  7. 一些实用的Javascript代码
  8. vue中的mixins怎么用?
  9. PHP学习之没有权限修改hosts文件
  10. Java工程师之SpringBoot系列教程前言目录