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

LiveIsLive 2006-01-24 10:20:27
请指教
...全文
1105 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
楼上有见解
加载更多回复(4)

34,590

社区成员

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

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