Count(*)和Count(1)的问题

------------------------------------------------------------------------------------------------------------------

1、我这里有10个字段。  
  count(1)和count(*)都是返回一样的结果!  
   
  2、到底谁的速度快一点。  
   
  问了很多人了,也网上搜索过一早上,还是没有确切答案,都是各执一词!各有各的理!  
   
  10W数据,测试是count(*)快一些,但是我以前不知道那里看过资料,说的是count(1)快!怎么回事情!?大家给个明确说法!  
------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

就是因为count,sum这些聚合函数加上统计group   by,遇到null自动略过,所以你用count(1),count(*)结果是很可能不一样,sum的话  
  我有个一个表A,作为测试  
  select   *   from   a  
  /*  
  a_nam               a_add              
  -----------   ----------    
  1                       aa  
  1                       bb  
  NULL                 kk  
  2                       kk  
  NULL                 uu  
  4                       dd  
  6                       yy  
  6                       yy  
   
  (8   row(s)   affected)  
  */  
   
  select   a_add,count(a_nam)   from   a  
  group   by   a_add  
  /*  
  a_add                                      
  ----------   -----------    
  aa                   1  
  bb                   1  
  dd                   1  
  kk                   1  
  uu                   0  
  yy                   2  
   
  (6   row(s)   affected)  
   
  Warning:   Null   value   is   eliminated   by   an   aggregate   or   other   SET   operation.  
  */  
   
  select   a_add,count(1)   from   a  
  group   by   a_add  
   
  /*  
  a_add                                      
  ----------   -----------    
  aa                   1  
  bb                   1  
  dd                   1  
  kk                   2   --有2笔,null认为存在  
  uu                   1   --为null,但是也认为有一笔  
  yy                   2  
   
  (6   row(s)   affected)  
  */  
   
  下面2个看看,很有意思,一个是空,一个是没有资料  
  select   sum(a_nam)   from   a  
  where   a_add   =   'xx'  
  group   by   a_add  
  /*  
                           
  -----------    
   
  (0   row(s)   affected)  
  */  
   
  select   sum(a_nam)   from   a  
  where   a_add   =   'xx'  
  /*  
  -----------    
  NULL  
   
  (1   row(s)   affected)  
  */  
  上面2个是因为没有用group   by造成的差异,有些程序认为null是有资料,那么就要注意啦  
  所以用聚合函数,一般要加上group   by,有出现null的资料,请加上isnull()转换  
   
  FYI

 

 

 

原帖地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值