关于函数COUNT('')及其变化的问题

时间:2011-09-21 07:19:39

标签: sql sql-server performance

COUNT('')COUNT(*)以及COUNT(1)COUNT(ColumnName)之间是否有任何区别?什么方法更快?

3 个答案:

答案 0 :(得分:6)

Count(ColumnName)受列值影响。其他变体的效果相同。

Count(*)在某些数据库(MySQL等)中速度较慢,因为它会检索所有字段,而不需要。经常使用'x'1这是安全的。 SQL Server和Oracle更加智能,如果不需要,则不会检索字段值。

请注意,''等于NULL在Oracle上(是的!),这可能会产生不良影响。对于SQL Server来说不是问题,但您可以使用1来保证安全。

答案 1 :(得分:4)

COUNT('')COUNT(1)COUNT(*)将返回相同的结果。 COUNT(ColumnName)可能返回不同的值,因为COUNT仅计算非空值。

性能方面,它们应该是等效的,至少在SQL-Server上是这样。

答案 2 :(得分:1)

对于SQL Server 2008,所有COUNT('')COUNT(1)COUNT(*)COUNT(NOT NULL column)来电都将转换为COUNT(*) = countstar,且只有一个COUNT将被转换为执行。