count(!)和count(*)和count(col)的执行效率


  count(*)和count(1)执行的效率是完全一样的。
COUNT(*) 返回组中的项数。包括 NULL 值和重复项。

COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。

expression: 除 text、image 或 ntext 以外任何类型的表达式。不允许使用聚合函数和子查询。

* :指定应该计算所有行以返回表中行的总数。

COUNT(*) 不需要任何参数,而且不能与 DISTINCT 一起使用。

COUNT(*) 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。

COUNT(*) 返回指定表中行数而不删除副本。它对各行分别计数。包括包含空值的行。

也就是说count(*)只是返回表中行数,因此SQL Server在处理count(*)的时候只需要找到属于表的数据块块头,然后计算一下行数就行了,而不用去读取里面数据列的数据。

而对于count(col)就不一样了,为了去除col列中包含的NULL行,SQL Server必须读取该col的每一行的值,然后确认下是否为NULL,然后在进行计数。因此count(*)应该是比count(col)快的,下面我们来验证一下。

 

posted @ 2018-12-06 14:53  团子emma  阅读(206)  评论(0)    收藏  举报