count(*)和sum(*)的结果有时候是一样的,所以有时候开放在写存储过程的时候会用到sum当count使用

这样有不有问题呢?我们来讨论下这2个的效率。

SQL> oradebug event 10046 trace name context forever,level 12;
Statement processed.
SQL>  select count(*) from business.PRPLCERTIFYIMGTEMPBAK;COUNT(*)
----------103287157Elapsed: 00:00:10.01
SQL> select sum(1) from business.PRPLCERTIFYIMGTEMPBAK;SUM(1)
----------103287157Elapsed: 00:00:13.27
SQL> oradebug event 10046 trace name context off;
Statement processed.
SQL> oradebug tracefile_name

从10046的信息,我们很容易就发现。sum的效率不足体现在cpu上,I/O完全一样。

select count(*)
frombusiness.PRPLCERTIFYIMGTEMPBAKcall     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.02          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      9.98       9.75     203828     203874          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      9.98       9.77     203828     203874          0           1Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYSRows     Row Source Operation
-------  ---------------------------------------------------1  SORT AGGREGATE (cr=203874 pr=203828 pw=0 time=9750091 us)
103287157   INDEX FAST FULL SCAN IDX_SERIALNO (cr=203874 pr=203828 pw=0 time=309861672 us)(object id 155232)Elapsed times include waiting on following events:Event waited on                             Times   Max. Wait  Total Waited----------------------------------------   Waited  ----------  ------------SQL*Net message to client                       2        0.00          0.00db file scattered read                      12791        0.00          0.65SQL*Net message from client                     2        3.47          3.47
********************************************************************************select sum(1)
frombusiness.PRPLCERTIFYIMGTEMPBAKcall     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2     13.26      12.95     203828     203874          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4     13.26      12.95     203828     203874          0           1Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYSRows     Row Source Operation
-------  ---------------------------------------------------1  SORT AGGREGATE (cr=203874 pr=203828 pw=0 time=12957830 us)
103287157   INDEX FAST FULL SCAN IDX_SERIALNO (cr=203874 pr=203828 pw=0 time=206574428 us)(object id 155232)Elapsed times include waiting on following events:Event waited on                             Times   Max. Wait  Total Waited----------------------------------------   Waited  ----------  ------------SQL*Net message to client                       2        0.00          0.00db file scattered read                      12791        0.00          0.63SQL*Net message from client                     2       10.56         10.56

为什么sum的效率不如count呢。那就要了解count和sum的算法了
举例说明他的算法:

在排序统计的时候
sum的算法为1+1+1+1+1+1=6,sum是未知的,需要额外的CPU每一步都需要计算
count是1+2+3=6,就是说count的计算公式是定的,发现一行,加1,那么就是1,下一次是从2开始加
显然sum的效率不如count。

所以开发童鞋们。在遇到类似的时候尽量使用count,而不用sum。

count(*)和sum(1) 的效率相关推荐

  1. Mysql中的count()与sum()区别

    Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` ...

  2. mysql count 与sum_Mysql下count()和sum()区别

    在mysql中有两个函数count()与sum()函数,有很多朋友搞不清楚,从英文的角度我们可以分析出来count是统计个数,sum是求各并且只能是数值型哦 要求:查询出2门及2门以上不及格者的平均成 ...

  3. leetcode 1925. Count Square Sum Triples(python)

    描述 A square triple (a,b,c) is a triple where a, b, and c are integers and a^2 + b^2 = c^2. Given an ...

  4. sql语句去重distinct、统计(count、sum)

    1.查询数组并去重 用distinct()函数 select distinct(字段名) from 表名 2.count(*) 和 sum() (1).count(*) 函数是用于统计数据的条数 se ...

  5. sql分组查询group by结合count,sum统计语句的实现(附带sql详细分析步骤)

    日常写代码经常会遇到数据统计的业务场景,分组查询 group by 结合 count 和 sum 的复杂语句写起来容易令人头大,在这里分享两个比较复杂的统计场景,提供详细分析思路和最终sql语句,希望 ...

  6. sql查询——查询每门课程各分数段的人数,分别用count和sum方法实现

    题目贴上: 得到所有section的等级分布.注:有一些等级像"A-",也算A等级. 对于每个section的等级分布,应列出以下信息: course_id year semest ...

  7. MySQL用函数统计记录总数_在mysql中使用COUNT 或者SUM函数计算记录总数

    count函数的作用 想要真正的理解count函数,我们就必须明白count函数的作用. 作用一:统计某一列非空(not null)值得数量,即统计某列有值得结果数,使用count(col),其中co ...

  8. MySQL中Count和Sum的区别

    sum()函数和count()函数的区别 其实两者很好容易区分,sum,即求和,多个列相加的和; count计数,一共有多少条数据 sum()函数求累加; 对符合条件的记录的数值列求和; count( ...

  9. Linq to SQL -- Select、Distinct和Count、Sum、Min、Max、Avg

    Select/Distinct操作符 适用场景:o(∩_∩)o- 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也 ...

最新文章

  1. 前端抱怨 API 响应慢,怎么办?
  2. 谷歌健康的「文化围墙」:空降的CEO,敌不过傲慢的Jeff Dean,和一群狂热的AI信徒
  3. 河北计算机课本初中,河北:2019-2020学年中小学教学用书有变
  4. 缺少物联网杀手级应用的运营商,到底该怎么办?
  5. nodejs新建服务器
  6. c语言 error 9,C语言求助(_) c:9: error: syntax error before '[' token
  7. Nuxt使用高德地图
  8. Blazor带我重玩前端(二)
  9. 文章之间的基本总结Activity生命周期
  10. 【Linux】磁盘分区
  11. spark TF-IDF入门
  12. 深入了解Java ClassLoader、Bytecode 、ASM、cglib (I)
  13. Cannot resolve plugin org.apache.tomcat.maven:tomcat7-maven-plugin:<unknown>
  14. 【图像处理】高斯滤波
  15. 计算机音乐蜡笔小新,蜡笔小新背景音乐-原创
  16. mac版MySQL初始密码修改
  17. mc通用计算机,《我的世界》里打造一台计算机有多难?复旦大神花一年终于实现!...
  18. 徽章系列3: Travis CI 的使用
  19. LibSVM中的松弛变量和惩罚因子
  20. 基于Python的JS逆向和AST抽象语法树

热门文章

  1. ram和flash的区别, SSD寿命, SSD和HHD速度比较, SSD和RAM速度比较
  2. configure: error: zlib library not found 解决方法
  3. python博弈论_博弈论 python
  4. 使用javaCV录制直播流
  5. Union/Merge/Dissolve/Append(ArcGIS)的区别联系(转贴)
  6. 护眼灯对眼睛真的有作用吗?一文了解市面上的护眼灯是否真的管用
  7. MySQL - 第10节 - MySQL索引特性
  8. 用plotly chart studio创建云托管的图表
  9. 资深程序员冒死揭开软件潜规则:无法维护的代码
  10. 关于ADAS系统小记