關於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)了。