In SQL, what’s the difference between count(*) and count('x')?本问题已经有最佳答案,请猛点这里访问。
我有以下代码:
如果我将COUNT(*)替换为COUNT('x'),结果或性能会有所不同吗? (此问题与上一个问题有关)
说
此外,
需要注意的一件事-如果您正在使用COUNT(col)(不要!)并且col被标记为NULL,那么它实际上将必须计算表中的出现次数(通过索引扫描,直方图等)它们是否存在,否则进行全表扫描)。 底线:如果您想要的是表中的行数,请使用COUNT(*) 这个问题与另一个提到的问题略有不同。在所引用的问题中,有人问到使用count(*)和count(SomeColumnName)有什么区别,SQLMenace的答案很明确。 为了解决这个问题,结果基本上没有区别。 count(*)和count('x')都说count(1)将返回相同的数字。区别在于,当使用" *"时,就像在SELECT中一样,将返回所有列,然后进行计数。当使用常数(例如'x'或1)时,会传回具有一栏的资料列,然后再进行计数。当" *"返回许多列时,将看到性能差异。 更新:上面关于性能的陈述可能不像其他答案中所讨论的那样正确,但是在使用EXISTS和NOT EXISTS时确实适用于子选择查询 主要的性能差异是可以通过检查表上的主键来满足COUNT(*)。 也就是说,在下面的简单情况下,查询将立即返回,而无需检查任何行。
我不确定SQL Server中的查询优化器是否会这样做,但是在上面的示例中,如果您要分组的列具有索引,则服务器应该能够满足查询而根本不击中实际表。 需要说明的是:此答案专门针对SQL Server。我不知道其他DBMS产品如何处理此问题。
MySQL:根据MySQL网站,对于使用MyISAM的单表查询, http://dev.mysql.com/doc/refman/5.0/zh/group-by-functions.html#function_count 我猜一个带有计数的hading子句可能会改变事情。 |