COUNT('')
和COUNT(*)
以及COUNT(1)
和COUNT(ColumnName)
之间是否有任何区别?什么方法更快?
答案 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将被转换为执行。