count(1)、count(*) 与 count(列名) 的区别?

mysql-2c754ee2-20c4-4c03-9db0-22c7c9eb7f01.png

执行效果

  • 使用 count(*) 将包括所有的列,相当于统计行数。在统计结果时,不会忽略列值为 NULL 的情况。
  • 使用 count(1) 将忽略所有列,使用数字 1 代表每一行。在统计结果时,不会忽略列值为 NULL 的情况。
  • 使用 count(列名) 只会统计指定的列。在统计结果时,会忽略列值为空(NULL)的计数。如果某个字段的值为 NULL,则不会计入统计结果。

执行速度

  • 如果列名是主键,count(列名) 的执行速度比 count(1) 快。
  • 如果列名不是主键,count(1) 的执行速度比 count(列名) 快。
  • 如果表有多个列且没有主键,count(1) 的执行效率优于 count(*)。
  • 如果表有主键,使用 select count(主键) 的执行效率最优。
  • 如果表只有一个字段,则 select count(*) 的执行效率最优。

标签: java, Java面试题, MySQL, Java问题合集, MySQL面试题, Java编程, Java问题精选, Java常见问题