Count(1)和Count(*)实际上的意思是,检测Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数。
只要在Count中指定非NULL表达式,结果没有任何区别。
对于Count(列)来说,同样适用于上面规则,评估列中每一行的值是否为NULL,如果为NULL则不计数,不为NULL则计数。
Count( )有不为NULL的值时,在SQL Server中只需要找出具体表中不为NULL的行数即可,也就是所有行
(如果一行值全为NULL则该行相当于不存在)。
那么最简单的执行办法是找一列NOT NULL的列,如果该列有索引,则使用该索引,当然,为了性能,SQL Server会选择最窄(内容占用的字节最少)的索引以减少IO。
因此,如果某个表上Count(*)用的比较多时,考虑在一个最短的列建立一个单列索引,会极大的提升性能。