count(列名):统计该列不为null值的行数
count(*):统计所有行的行数,包括 NULL 值和重复项。
count(1):同count(*)
效率(知乎链接:https://www.zhihu.com/question/19641756/answer/19810133):
1.除非要统计某列非空值的总数,否则任何情况一律用COUNT(*),效率比COUNT(列名)高很多
2.除非有特殊需要,否则COUNT(*)不要加WHERE条件,会严重影响效率,如果加了条件COUNT(*)和COUNT(主键)效率是一致的,COUNT(非主键)效率很低
3.在没有WHERE条件的情况下:COUNT(*)等于COUNT(主键)优于COUNT(非主键有索引)优于COUNT(非主键无索引)
4.只要加了WHERE就会降低效率,即使是WHERE 1=1
2.除非有特殊需要,否则COUNT(*)不要加WHERE条件,会严重影响效率,如果加了条件COUNT(*)和COUNT(主键)效率是一致的,COUNT(非主键)效率很低
3.在没有WHERE条件的情况下:COUNT(*)等于COUNT(主键)优于COUNT(非主键有索引)优于COUNT(非主键无索引)
4.只要加了WHERE就会降低效率,即使是WHERE 1=1
mysql> select * from tmp2;
+------+------+
| id | name |
+------+------+
| 1 | a |
| NULL | NULL |
| NULL | NULL |
mysql> select count(id) from tmp2;
+-----------+
| count(id) |
+-----------+
| 1 |
+-----------+
1 row in set (0.01 sec)
mysql> select count(*) from tmp2;
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.01 sec)
mysql> select count(1) from tmp2;
+----------+
| count(1) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)