[ORACLE]杀死伪科学──也谈count(*)和count(1) (

本文探讨了Oracle数据库中COUNT(*)与COUNT(1)的使用情况,通过实验和个人经验指出两者并无实质区别,并引用Oracle官方解答证实这一点。

[ORACLE]杀死伪科学──也谈count(*)和count(1)

  (2011-09-01 09:43:13)
标签: 

oracle

 

count

 

杂谈

分类: Oracle

在部门里发现有一些工程师热衷于使用count(1)或者count(0)之类的聚合查询,用一些可能还有点保守。曾经问过几个工程师count(1)count(*)到底有什么区别,有的说count(1)count(*)快,还有一个说等你实际碰到问题时就知道count(1)的优势了!有一次我在群里面讨论一个技术问题,用到了count(*)查询,当时就有一个同事说使用count(1)这是常识,当时我就汗颜了,搞了这么长时间数据库,原来我连常识都不知道! 

我始终坚持在代码中使用count(*),因为我经过自己的实验没有发现count(1)count(*)有任何优点,而那些听说count(1)count(*)更高效的工程师,无一能够说出具体的原因来,这成了一个美丽的传说!不过我也发现了一个问题,热衷于count(1)的工程师基本上是工作1年左右或者未满1年的,我从没有听说哪个数据库专家或者DBA说过count(1)count(*)更好的理论。 

在网上也查了一些针对count(*)count(1)的实验,但是没有一个能说清楚个所以然的,有的甚至用执行时间去衡量二者的好坏,这个有点太不专业了! 

最后,我只能搬出TOM他老人家来说明count(*)count(1)真的没什么差别,别在坚持这个谬论了!引用如下: 

You Asked

What is the difference between count(1) and count(*) in a sql query

eg.

select count(1) from emp;

   and

select count(*) from emp;

and we said...

nothing, they are the same, incur the same amount of work -- do the same thing, take the

same amount of resources.

 

具体解释请自行阅读:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1156159920245

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值