要想弄清楚這個問題,那就得先搞清楚COUNT()函數,COUNT()函數可以有如下幾種用法:
1、SELECT COUNT(字段名) FROM 表名;
解釋:統計該字段名不為null的數據總數。
2、SELECT COUNT(*) FROM 表名;
解釋:統計該數據表中數據總數。
3、SELECT COUNT(1) FROM 表名;
解釋:統計該數據表中數據總數。
COUNT(*)和COUNT(1)的區別:
這倆種方式都可以用來統計表中總數據量,但是他們的實現方式略有不同。
- COUNT(*)是統計表中的行(該行數據同時都不為null)的數據總量,也就是說如果有一行所有數據都為null,那么就不會被統計。
- COUNT(1)是通過在該表的表結構中添加一列,該列的數據都為1,最終是通過統計該列中有多少個數據為1的數量,即為數據總數。
在效率方面:
- MYISAM存儲引擎中,count(*)的效率高,因為該存儲引擎中有數據計數器,直接可以獲取數據總量;
- INNODB存儲引擎中,count(*)和count(1)效率差不多,都比COUNT(表名)效率高(因為該方式得判斷字段值是否為null);