select count(1) from tablename;select count(*) from tablename 的区别

hebeijg 2010-11-04 05:25:01
select getdate()
select count(1) from tablename
select getdate()
select count(*) from tablename
select getdate()
tablename表里有80多万条数据
执行了 N遍上面的数据
我竟然发现 select count(*) from tablename 执行的时间大部分情况下竟然比select count(1) from tablename
快一点,偶尔也会慢一点。

我的理解
count(1) 怎么也会比count(*) 快一点,

求高手解惑
谢谢
...全文
244 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
billpu 2010-11-04
  • 打赏
  • 举报
回复
补充一下 在聚集索引在int自增列的时候 count(1)更快
obuntu 2010-11-04
  • 打赏
  • 举报
回复
没必要计较这个,还是好好研究下索引、主键的选择。
billpu 2010-11-04
  • 打赏
  • 举报
回复
我做过测试 数据在小的时候,没有索引的时候看执行计划都一样
感觉在数据量超大的时候,表的索引情况复杂的时候(类型),你还是用count(*)可能优化器在索引选择上更优一些
guguda2008 2010-11-04
  • 打赏
  • 举报
回复
讨论过很多次了,结论就是用哪个都一样
黄_瓜 2010-11-04
  • 打赏
  • 举报
回复
sql 随着版本的升级,优化器逐渐基于成本,而不是规则。
黄_瓜 2010-11-04
  • 打赏
  • 举报
回复
一样的。细微差别 跟缓存,当前计算机运行状态都有关的。

以前讨论过很多次,你翻翻精华帖。
HSBOY86 2010-11-04
  • 打赏
  • 举报
回复
count(*) 好像他自己会找到最快的列来计算的
fpzgm 2010-11-04
  • 打赏
  • 举报
回复
count(1),count(*)
纯粹计算行数

count(col)
计算col非空行数
fpzgm 2010-11-04
  • 打赏
  • 举报
回复
没研究过,帮顶
不过感觉差不了多少
王向飞 2010-11-04
  • 打赏
  • 举报
回复
不清楚。。
「已注销」 2010-11-04
  • 打赏
  • 举报
回复
count(1) 怎么也会比count(*) 快一点
============
count(*)实际上跟count(primary key)速度是差不多的,
如果是其他非primary key的字段则性能则没count(*)好。

理论上来讲:count(0)=count(1)=count(*)

count(指定的有效值)---sql后台执行都会转换为count(*)
如果指定的是列名,则会判断是否有null值,因为null不计算在记录内。
claro 2010-11-04
  • 打赏
  • 举报
回复
1、看结果集。

2、看执行计划。

34,594

社区成员

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

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