count(*)和sum(1) 的效率
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) 的效率相关推荐
- Mysql中的count()与sum()区别
Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` ...
- mysql count 与sum_Mysql下count()和sum()区别
在mysql中有两个函数count()与sum()函数,有很多朋友搞不清楚,从英文的角度我们可以分析出来count是统计个数,sum是求各并且只能是数值型哦 要求:查询出2门及2门以上不及格者的平均成 ...
- 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 ...
- sql语句去重distinct、统计(count、sum)
1.查询数组并去重 用distinct()函数 select distinct(字段名) from 表名 2.count(*) 和 sum() (1).count(*) 函数是用于统计数据的条数 se ...
- sql分组查询group by结合count,sum统计语句的实现(附带sql详细分析步骤)
日常写代码经常会遇到数据统计的业务场景,分组查询 group by 结合 count 和 sum 的复杂语句写起来容易令人头大,在这里分享两个比较复杂的统计场景,提供详细分析思路和最终sql语句,希望 ...
- sql查询——查询每门课程各分数段的人数,分别用count和sum方法实现
题目贴上: 得到所有section的等级分布.注:有一些等级像"A-",也算A等级. 对于每个section的等级分布,应列出以下信息: course_id year semest ...
- MySQL用函数统计记录总数_在mysql中使用COUNT 或者SUM函数计算记录总数
count函数的作用 想要真正的理解count函数,我们就必须明白count函数的作用. 作用一:统计某一列非空(not null)值得数量,即统计某列有值得结果数,使用count(col),其中co ...
- MySQL中Count和Sum的区别
sum()函数和count()函数的区别 其实两者很好容易区分,sum,即求和,多个列相加的和; count计数,一共有多少条数据 sum()函数求累加; 对符合条件的记录的数值列求和; count( ...
- Linq to SQL -- Select、Distinct和Count、Sum、Min、Max、Avg
Select/Distinct操作符 适用场景:o(∩_∩)o- 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也 ...
最新文章
- 前端抱怨 API 响应慢,怎么办?
- 谷歌健康的「文化围墙」:空降的CEO,敌不过傲慢的Jeff Dean,和一群狂热的AI信徒
- 河北计算机课本初中,河北:2019-2020学年中小学教学用书有变
- 缺少物联网杀手级应用的运营商,到底该怎么办?
- nodejs新建服务器
- c语言 error 9,C语言求助(_) c:9: error: syntax error before '[' token
- Nuxt使用高德地图
- Blazor带我重玩前端(二)
- 文章之间的基本总结Activity生命周期
- 【Linux】磁盘分区
- spark TF-IDF入门
- 深入了解Java ClassLoader、Bytecode 、ASM、cglib (I)
- Cannot resolve plugin org.apache.tomcat.maven:tomcat7-maven-plugin:<unknown>
- 【图像处理】高斯滤波
- 计算机音乐蜡笔小新,蜡笔小新背景音乐-原创
- mac版MySQL初始密码修改
- mc通用计算机,《我的世界》里打造一台计算机有多难?复旦大神花一年终于实现!...
- 徽章系列3: Travis CI 的使用
- LibSVM中的松弛变量和惩罚因子
- 基于Python的JS逆向和AST抽象语法树
热门文章
- ram和flash的区别, SSD寿命, SSD和HHD速度比较, SSD和RAM速度比较
- configure: error: zlib library not found 解决方法
- python博弈论_博弈论 python
- 使用javaCV录制直播流
- Union/Merge/Dissolve/Append(ArcGIS)的区别联系(转贴)
- 护眼灯对眼睛真的有作用吗?一文了解市面上的护眼灯是否真的管用
- MySQL - 第10节 - MySQL索引特性
- 用plotly chart studio创建云托管的图表
- 资深程序员冒死揭开软件潜规则:无法维护的代码
- 关于ADAS系统小记