【发布时间】:2014-06-09 09:58:21
【问题描述】:
COUNT(*) 和 COUNT(table.ColumnName) 有什么区别?
我一直以为把列名作为COUNT的参数会比较快,但现在想起来我真的不知道因为*的意思是函数计算行数,所以可能有没有区别吗?或者也许给出一个特定的列名甚至会减慢这个过程?
【问题讨论】:
COUNT(*) 和 COUNT(table.ColumnName) 有什么区别?
我一直以为把列名作为COUNT的参数会比较快,但现在想起来我真的不知道因为*的意思是函数计算行数,所以可能有没有区别吗?或者也许给出一个特定的列名甚至会减慢这个过程?
【问题讨论】:
这两者之间的区别不是(主要)性能。他们计算不同的东西:
COUNT(*) 计算表中的行数。
COUNT(column) 计算列中的条目 - 忽略 null 值。
当然,这两者之间会有性能差异,但如果他们做不同的事情,这是可以预料的。特别是当列允许null-values 时,查询将比不允许的列(或COUNT(*))花费更长的时间。
【讨论】:
COUNT(*) 返回所有记录的计数
COUNT(table.ColumnName) 返回所有非空值的计数。
参见微软文档:
http://technet.microsoft.com/en-us/library/ms175997.aspx
全部
将聚合函数应用于所有值。 ALL 是默认值。
不同
指定 COUNT 返回唯一非空的个数 价值观。
【讨论】: