count(*)、count(1)和count(列名)

来源:互联网 发布:数据科学专业 编辑:程序博客网 时间:2024/05/21 10:33

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




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)