灌水唠嗑区
其他
问答

数据库中 COUNT (1)、COUNT (*)、COUNT (列名) 有什么区别?

发表于2026-04-07 17:36:4310次浏览2个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:

【操作系统】:

【CPU】:

【问题描述】*:数据库中 COUNT (1)、COUNT (*)、COUNT (列名) 有什么区别?

评论

登录后才可以发表评论
用户头像
柒柒天晴发表于 3个月前
555
用户头像
GBASE8C-AN发表于 3个月前

在数据库中,  COUNT(1)  、  COUNT(*)   和   COUNT(列名)   的主要区别在于统计的对象和对待   NULL   值的方式。
1. COUNT(*)
这是最常用的写法,用于统计查询结果集中的总行数。无论行中是否存在   NULL   值,都会被计入总数。
2. COUNT(1)
它的功能和结果与   COUNT(*)   完全相同,也是统计总行数。这里的   1   是一个常量,不代表实际列,数据库引擎会为每一行生成一个值为   1   的虚拟列并进行计数。在现代主流数据库中,它与   COUNT(*)   的性能没有差异。
3. COUNT(列名)
这种写法统计的是指定列中非   NULL   值的数量。如果某行的该列值为   NULL  ,则该行不会被计入总数。
总结与对比| 写法 | 统计对象 | 是否计算   NULL   | 性能说明 | 
|   COUNT(*)   | 结果集的总行数 | 是 | 现代数据库已优化,性能佳。 | 
|   COUNT(1)   | 结果集的总行数 | 是 | 与   COUNT(*)   性能无实质差别。 | 
|   COUNT(列名)   | 指定列的非   NULL   值数量 | 否 | 需要检查列值是否为   NULL  ,理论上比前两者稍慢。 | 

使用建议
如果想统计表中的确切行数,应使用   COUNT(*)   或   COUNT(1)  ,它们是等效的。
如果只想统计某列有效(非   NULL  )数据的数量,则使用   COUNT(列名)  。
在 GBase 8a 及其他主流数据库中,  COUNT(*)   已是标准且高效的写法,可以放心使用。