作者:BigoSprite 链接:https://blog.csdn.net/iFuMI/article/details/77920767
1、count(1) and count(*)
当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!
从执行计划来看,count(1)和count(*)的效果是一样的。但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!
2、count(1) and count(字段)
两者的主要区别是
转自:http://www.cnblogs.com/Dhouse/p/6734837.html
执行效果上:
执行效率上:
1mysql> create table counttest(name char(1), age char(2));
2Query OK, 0 rows affected (0.03 sec)
3
4mysql> insert into counttest values
5 -> ('a', '14'),('a', '15'), ('a', '15'),
6 -> ('b', NULL), ('b', '16'),
7 -> ('c', '17'),
8 -> ('d', null),
9 ->('e', '');
10Query OK, 8 rows affected (0.01 sec)
11Records: 8 Duplicates: 0 Warnings: 0
12
13mysql> select * from counttest;
14+------+------+
15| name | age |
16+------+------+
17| a | 14 |
18| a | 15 |
19| a | 15 |
20| b | NULL |
21| b | 16 |
22| c | 17 |
23| d | NULL |
24| e | |
25+------+------+
268 rows in set (0.00 sec)
27mysql> select name, count(name), count(1), count(*), count(age), count(distinct(age))
28 -> from counttest
29 -> group by name;
30+------+-------------+----------+----------+------------+----------------------+
31| name | count(name) | count(1) | count(*) | count(age) | count(distinct(age)) |
32+------+-------------+----------+----------+------------+----------------------+
33| a | 3 | 3 | 3 | 3 | 2 |
34| b | 2 | 2 | 2 | 1 | 1 |
35| c | 1 | 1 | 1 | 1 | 1 |
36| d | 1 | 1 | 1 | 0 | 0 |
37| e | 1 | 1 | 1 | 1 | 1 |
38+------+-------------+----------+----------+------------+----------------------+
395 rows in set (0.00 sec)
40