count函数

zhaojianmi1 2011-07-21 11:18:08
Mr_bean大哥提的问题,我觉得有必要拿出来给大家讨论一下
count(*)、count(1)和count(某字段)从count的结果看有什么区别,他们的原理是什么样的,性能如何
...全文
172 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
影子鑫 2011-12-19
  • 打赏
  • 举报
回复
路过
学习下

关于count(*) 和 count(1) 的性能差异,
不是很清楚,
希望有大师来指点一下
zyzhou2011 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hareshaolize 的回复:]
count(*) 不需要任何参数,而且不能与 DISTINCT 一起使用。count(*) 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。count(*) 返回指定表中行的数量而不消除副本。它对每行分别进行计数,包括含有空值的行。
count(all expression) 对组中的每一行都计算 expression 并返回非空值的数量。
count(1……
[/Quote]

可以和distinct一起用吧
iihero 2011-08-01
  • 打赏
  • 举报
回复
3楼5楼的解释很好很完整。
wp28556259 2011-07-29
  • 打赏
  • 举报
回复
学习了
zhaojianmi1 2011-07-22
  • 打赏
  • 举报
回复
恩,我弄错了,呵呵[Quote=引用 10 楼 wwwwb 的回复:]

不会吧,测试 了一下
count(*)结果4,count(1)结果4
[/Quote]
wwwwb 2011-07-22
  • 打赏
  • 举报
回复
count(字段名)结果2
wwwwb 2011-07-22
  • 打赏
  • 举报
回复
不会吧,测试 了一下
count(*)结果4,count(1)结果4
zhaojianmi1 2011-07-22
  • 打赏
  • 举报
回复
count(*)和count(1)结果会不一样吧,比如:
字段名
1
2
NULL
NULL

count(*)结果2,count(1)结果4

[Quote=引用 6 楼 jaylongli 的回复:]

楼上说的很清楚了
我一般用 count(*)、count(1) 这两个

count(1)效率会高些
[/Quote]
wwwwb 2011-07-22
  • 打赏
  • 举报
回复
可以测试一下,如有有索引的话,可以使用
zhaojianmi1 2011-07-22
  • 打赏
  • 举报
回复
如果一个表有聚集索引的话count(*)、count(1)是不是就直接优化为扫描聚集索引了
hareshaolize 2011-07-21
  • 打赏
  • 举报
回复
count(*) 不需要任何参数,而且不能与 DISTINCT 一起使用。count(*) 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。count(*) 返回指定表中行的数量而不消除副本。它对每行分别进行计数,包括含有空值的行。
count(all expression) 对组中的每一行都计算 expression 并返回非空值的数量。
count(1)与count(*)执行效率差不多
具体原理不太清楚了
加油馒头 2011-07-21
  • 打赏
  • 举报
回复
楼上说的很清楚了
我一般用 count(*)、count(1) 这两个

count(1)效率会高些
ACMAIN_CHM 2011-07-21
  • 打赏
  • 举报
回复
count(*)、count(1)

两个一样,结果一样,执行效率也一样。

count(某字段) 则不包括 某字段 为NULL的记录。效率相对比count(*)、count(1)差
zhaojianmi1 2011-07-21
  • 打赏
  • 举报
回复
为什么现在的帖子都不按时间排序了,找都找不到。。。
WWWWA 2011-07-21
  • 打赏
  • 举报
回复
count(*) :返回所有行数,包括NULL
count(某字段):返回不包括NULL所有行数
count(1):没有条件下与count(*)相同,在有条件下,与count(某字段)相同,比如
select count(某字段) from tt
=
SELECT COUNT(1) FROM tt WHERE xm IS NOT NULL ;

性能相差不多,如果有索引的话,会用到
WWWWA 2011-07-21
  • 打赏
  • 举报
回复
count(*) :返回所有行数,包括NULL
count(某字段):返回不包括NULL所有行数
count(1):没有条件下与count(*)相同,在有条件下,与count(某字段)相同,比如
select count(某字段) from tt
=
SELECT COUNT(1) FROM tt WHERE xm IS NOT NULL ;

性能相差不多,如果有索引的话,会用到

5,891

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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