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

LiveIsLive 2006-01-24 10:20:27
请指教
...全文
1068 24 打赏 收藏 举报
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
楼上有见解
  • 打赏
  • 举报
回复
加载更多回复(4)
发帖
MS-SQL Server

3.4w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2006-01-24 10:20
社区公告
暂无公告