SQL最佳实践:count(1)或count(*)

Cla*_*key 15 sql

可能重复:
计数(*)与计数(1)

我记得有传闻说:

当count(1)执行时,永远不要使用count(*)

最近我把这个建议传递给了另一位开发人员,并且被要求证明这是真的.当我得到建议时,我的论点就是我被告知的情况:数据库只返回第一列,然后计算.反驳的是,数据库不会评估括号中的任何内容.

从小桌子上的一些(不科学的)测试来看,似乎没有区别.我目前无权访问任何大型表格进行试验.

当我使用Sybase时,我得到了这个建议,表有数亿行.我现在正在使用Oracle并且数据少得多.

所以我想总结一下,我的两个问题是:

  1. 哪个更快,计数(1)还是计数(*)?
  2. 不同的数据库供应商会有所不同吗?

and*_*ndy 17

根据另一个类似的问题(Count(*)vs Count(1)),它们是相同的.

根据Ask Tom的说法,在Oracle中,count(*)是计算行数的正确方法,因为优化器将count(1)更改为count(*).count(1)实际上意味着计算具有非null 1的行(所有这些都是非null,因此优化器将为您更改它).