对码当歌,猿生几何?

MySql中的count、NULL和空串的区别

        nblogs-markdown">

**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

附、参考:

  1. count (1)、count (*) 与 count (列名) 的执行区别 - iFuMI 的博客 - CSDN 博客
    注:很棒的一篇文章。

  2. 高性能 MySQL——Count (1) OR Count (*)? - 知乎
    注:原文有错,不过还是值得参考。

  3. SQL 中的 SUM ()、AVG ()、COUNT () 等聚集函数对 NULL 值的处理方法 - J__Max 的博客 - CSDN 博客

  4. MySql 判断是否为 null 或空字符串 - bestlove12345 的博客 - CSDN 博客

  5. MySql 中判断字符串相等 - 洋成林 - CSDN 博客