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)快的,下面我们来验证一下。

浙公网安备 33010602011771号