关于count方法一直存在争议,count(*)、count(列名)、count(常量),到底应该使用哪个?我认为应该是count(*),count(*)是SQL92定义的标准统计数的方法。我曾经有幸阅读过阿里巴巴的开发规范,里面提到强制使用count(*)。
我通过以下四个查询命令来说明三个方法的区别:
1.select count(*) from emp;
2.select count(1) from emp;
3.select count(job) from emp;
4.select count(*) from emp where jobis not null;
第一条命令查出的结果是员工的数量。
第二条命令查出的结果是员工的数量。
第三条命令查出的结果是工种不为空的员工的数量。
第四条命令查出的结果是工种不为空的员工的数量。
显然,第一条与第二条的效果相同,第三条与第四条的效果相同。
至于1,2为什么选择1,因为1大家都能看懂,2已经不止一个人问过我是什么意思。至于3,4为什么选择4,因为4大家都能看懂,3会给不同的读者带来不同的理解。
有部分人可能会说count(*)没有count(1)的效率高,我在一张包含33554432条记录的表中,使用count(*)和count(1)测试,所消耗的时间都是3到4秒之间。
所以,大家完全可以不要因为效率问题而选择使用count(1)了。