含义:

  1. count(1)对每行都记录,无论该行的值是什么。将固定常量值1作为参数,只需检查是否存在行,而不关心具体数值。(计算一共有多少符合条件的行,不会忽略null值)
  2. count(*)对所有行进行计数。使用通配符作为参数,表示计算所有行的数量。(统计所有的行数,包括为null的行)
  3. count(colunm)对指定列中非空值的行进行计数。接收一个具体的列名作为参数,只统计该列中非null值的行数。(如果列中存在null值,则不计入计数结果)

区别:

  • count(1)和count(*)都是计算总行数,不关心具体值,而count(column)只计算指定列中非null值的行数
  • count(1)和count(*)没有区别,在效果和执行效率上相似。大多数情况下,它们的执行效率是相等的

执行效率:

count(字段) < count(主键id) < count(1) ≈ count(*)