mysql如何优雅的使用count
MySql中的count、NULL和空串的区别
1、count (1)、count (*) 与 count (列名) 的区别
| 表 | count(1) | count(*) | count (列名) |
|---|---|---|---|
| 作用 | 统计表中的所有的记录数 | 会统计表中的所有的记录数 | 统计该字段在表中出现的次数 |
| 是否包含字段为 null | 包含 | 包含 | 不包含 |
| 区别 | count (1) 和 count (*) 基本没差别,实际建议count (*) | count (1) 和 count (*) 基本没差别实际建议count (*) |
效率:
- 列名为主键,count (列名) 会比 count (1) 快
- 列名不为主键,count (1) 会比 count (列名) 快
- 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
- 如果有主键,则 select count(主键)的执行效率是最优的
- 如果表只有一个字段,则 select count(*)最优。
2、MYSQL 中Null 和空串的区别,以及比较
| 表 | null | 空字符串 |
|---|---|---|
| 含义 | “没有值” 或 “未知值”,且它被看作与众不同的值。 | 空字符串 |
| 比较 | IS NULL或者IS NOT NULL |
=、< 或!= |
如果字符串和Null比较,会发生什么情况?
注意:=和<=>的区别

3、各函数对Null的处理
| 函数 | 效果 |
|---|---|
| AVG () | 忽略 NULL 值,而不是将其作为 “0” 参与计算 |
| COUNT(*) | 不忽略NULL 值 |
| COUNT (字段名) | 忽略NULL 值 |
| SUM () | 忽略 NULL 值。且当对多个列运算求和时,如果运算的列中任意一列的值为 NULL,则忽略这行的记录。 |
| GROUP BY | 两个 NULL 值视为相同。 如果运行 ORDER BY ... ASC,则 NULL 值出现在最前,若运行 ORDER BY ... DESC,则 NULL 值出现在最后。 |
| distinct | 无论遇到多少个空值,结果中只返回一个 null |
附、参考:
浙公网安备 33010602011771号