导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

count(*)跟count(ID)在性能上有没有差别?

LiveIsLive 2006-01-24 10:20:27
请指教
...全文
883 点赞 收藏 24
写回复
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jie115 2006-01-26
写成count(主键)更多是为了标准化,在性能上和count(*)没有什么差别

所以在测试的时候才会出现两种方法运行时间是交替的
回复
colinliu 2006-01-25
count(*)快点
回复
zouqiang122 2006-01-25
支持一下!!!
回复
pgy8288 2006-01-25
看ID是不是聚蔟索引字段了
如果是聚蔟索引的话那应该都差不多的
count(*)的时候MS SQL 会自动优化一下,以选择最高效的统计字段
回复
count(*)与count(字段)含义不同,结果不同。

create table #aa(f int)
insert #aa(f) select 1 union all select 2 union all select 2 union all select 3 union all select 3 union all select 3 union all select 4 union all select 4 union all select 4 union all select 4 union all select null
select count(*) from #aa
select count(f) from #aa
go
回复
pbsql 2006-01-25
事实证明效率几乎一样,引起差异的原因是执行的先后顺序不同
回复
ioriyp 2006-01-25
count(ID)快,
在刚参加工作的时候,
公司的编程规范明确指出,
因为效率问题,SQL必须写成count(ID),而不能写成count(*).
回复
lw1a2 2006-01-24
用count(1)
回复
artoksxb 2006-01-24
count(*)以行记录
count(ID)以ID 不能空来记录
回复
-狙击手- 2006-01-24
个人以为,count(*) 快
回复
liuziran 2006-01-24
一般没区别,如果Id列有null值,无论从性能上,还是含义上都有区别
回复
pbsql 2006-01-24
也许count(*)会快点,它是取所有的行数,count(ID)是取除ID为NULL的所有的行数,多了个判断
回复
lsqkeke 2006-01-24
有差别
count(ID)比count(*)高效
回复
fgdsagfd543543 2006-01-24
COUNT(*)还是会先找主键的。

如果主键不是ID而是其他的话,应该会是COUNT(*)快的。
回复
natfit 2006-01-24
用sql分析器进行跟踪,发现没有区别

有区别可能是一个先执行,一个后执行的原因(还有就是服务器的工作状态的差别)
回复
QQMagicer 2006-01-24
select getdate()
select Count(*) from t_info group by batch
select getdate()
select Count(batch) from t_info group by batch
select getdate()
select Count(*) from t_info group by batch
select getdate()
这个是非主键的查询结果
-----
2006-01-24 16:41:59.083
-----
2006-01-24 16:43:02.810
-----
2006-01-24 16:44:28.600
---
2006-01-24 16:45:57.173

----
其实相差结果不是很大,上下2-3S的差距,在过程中几乎可以忽略了!ID自增长的情况,可以请有条件的给出,这种情况我没有那么大的数据量
回复
pbsql 2006-01-24
与ID是否索引似乎无关

测试数据49690000行,表结构:t(id int,a int),id上建有索引,a上无索引
SELECT count(*) FROM t--1分三十几秒
SELECT count(id) FROM t--1分十几秒,有时1分几秒
SELECT count(a) FROM t--与count(id)差不多
回复
terence4444 2006-01-24

如果ID是自动增长的,会不会更快一点呢?
回复
QQMagicer 2006-01-24
回复人: terence4444(T4)
为了排除首次连接的时间,楼上请把*和ID的顺序更换一下看看

另外你的ID是不是自动增长的主键?
-----
我的是二次查询的结果,已经排除过连接时间,如果算上首次连接,上下会相差6s


ID不是自动增长的,但是是主键
回复
rfq 2006-01-24
楼上有见解
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告