请教count(0)和count(*)哪个效率高?

chinastorm 2009-07-02 12:09:03
加精
数据库使用的是SQL 2005,数据库表中有40多万条数据,第一项是GUID,字段有10几个,用count(0)和count(*)哪个效率会高一点呀?如果有1000万条记录呢?
谢谢!
...全文
3804 118 打赏 收藏 转发到动态 举报
写回复
用AI写文章
118 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwdream2008 2011-11-09
  • 打赏
  • 举报
回复
ak_ljd 2011-11-08
  • 打赏
  • 举报
回复
小白太多了,回复请慎重,你可以不会,但绝不能误人子弟!!!
mianmuhua 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 67 楼 new_dongfang 的回复:]

引用 30 楼 kingtiy 的回复:
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )


参数
ALL
对所有的值进行聚合函数运算。ALL 是默认值。

DISTINCT
指定 COUNT 返回唯一非空值的数量。

expression
除 text、image 或 ntext 以外任何类型的表达式。不允许使用聚……
[/Quote]
正解 count(1)和count(*)都包括NULL值
  • 打赏
  • 举报
回复
mark
lovezx1028 2009-11-23
  • 打赏
  • 举报
回复
mark
albort2009 2009-11-18
  • 打赏
  • 举报
回复
COUNT(*) 返回组中项目的数量,这些项目包括 NULL 值和副本。

COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。

COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。
wangwei4348 2009-11-18
  • 打赏
  • 举报
回复
当然count(*)效率高了
langzhiwang888 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 cxmcxm 的回复:]
count(0)忽略空值应该是错误的说法
0为常量,不存在空值,count(0)与count(*)一样
count(字段或计算列)会忽略空值
count(expression)与count(all expression)应为等价
SQL codecreatetable #tmp (idintnull)insert #tmpselect1unionallselect2unionallselect2unionallselect3unionallselect2unionallselectnullunionallselectnullunionallselect4selectcount(*),count(id),count(all id),count(distinct id)from #tmp
SQL code----------- ----------- ----------- -----------8664

(所影响的行数为1 行)
[/Quote]

正解,COUNT(*)计算的是全部
sea0302 2009-10-25
  • 打赏
  • 举报
回复
count(0)=count(1)=count(*),是一样的
virusswb 2009-10-15
  • 打赏
  • 举报
回复
roy_88 is right
other is wrong
taozhi_yaoyao 2009-08-17
  • 打赏
  • 举报
回复
一起学习哈哈
JoeTangERP 2009-08-14
  • 打赏
  • 举报
回复
很好,學到點東西!
huangri283784830 2009-08-14
  • 打赏
  • 举报
回复
ding
zc_0101 2009-08-11
  • 打赏
  • 举报
回复
--创建测试表
create table tb(id varchar(10))
--插入非空数据
insert tb select 'test'
go
--测试
select count(0) as 'count(0)',count(1) as 'count(1)',count(*) as 'count(*)',count(id) as 'count(id)' from tb
--结果
/*
count(0) count(1) count(*) count(id)
1 1 1 1
*/
--插入null值
insert tb values(null)
go
--测试
select count(0) as 'count(0)',count(1) as 'count(1)',count(*) as 'count(*)',count(id) as 'count(id)' from tb
--结果
/*
count(0) count(1) count(*) count(id)
2 2 2 1
*/
--插入空值
insert tb values ('')
go
--测试
select count(0) as 'count(0)',count(1) as 'count(1)',count(*) as 'count(*)',count(id) as 'count(id)' from tb
--结果
/*
count(0) count(1) count(*) count(id)
3 3 3 2
*/
--结论
/*
count(0)=count(1)=count(*) --不忽略null值和空值
count(列名) --忽略null值
*/
zc_0101 2009-08-11
  • 打赏
  • 举报
回复

count(0)=count(1)=count(*) --不忽略null值和空值
count(列名) --忽略null值

zc_0101 2009-08-11
  • 打赏
  • 举报
回复
天啊,太多回复误人子弟了。。。。
chinastorm 2009-07-09
  • 打赏
  • 举报
回复
结贴了,没有仔细测试,做了索引应该好点
谢谢大家!
djog 2009-07-04
  • 打赏
  • 举报
回复
count(ID)吧..感觉.....
cxmcxm 2009-07-04
  • 打赏
  • 举报
回复
count(0)忽略空值应该是错误的说法
0为常量,不存在空值,count(0)与count(*)一样
count(字段或计算列)会忽略空值
count(expression)与count(all expression)应为等价
create table #tmp (id int null)

insert #tmp
select 1
union all select 2
union all select 2
union all select 3
union all select 2
union all select null
union all select null
union all select 4


select count(*),count(id),count(all id),count(distinct id) from #tmp

----------- ----------- ----------- ----------- 
8 6 6 4

(所影响的行数为 1 行)
rucypli 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 chinastorm 的回复:]
数据库使用的是SQL 2005,数据库表中有40多万条数据,第一项是GUID,字段有10几个,用count(0)和count(*)哪个效率会高一点呀?如果有1000万条记录呢?
谢谢!

[/Quote]。
加载更多回复(95)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧