**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 |
附、参考: