小不的笔记

时间之外的往事

COUNT()的作用

COUNT()是一个特殊的函数, 有两种非常不同的作用: 它可以统计某个列值的数量,也可以统计行数。 在统计列值时要求列值是非空的(不统计NULL)。 如果在COUNT()的括号中指定了列或者列的表达式, 则统计的就是这个表达式有值的结果数。 因为很多人对NULL理解有可题, 所以这里很容易产生误解。 如果想了解更多关于SQL语句中 NULL 的含义, 建议阅读一些关于SQL语句基础的书籍. (关于这个话题, 互联网上的一些信息息是不够精确的。) COUNT()的另一个作用是统计结果集的行数。当MySQL确认括号内的表达式值不可能为空时,实际上就是在统计行数. 最简单的就是当我们使用COUNT(*)的时候,这种情况下通配符*并不会像我们猜想的另那样扩展成所有的列, 实际上它会忽略所有的列而直接统计所有的行数。 我们发现一个最常见的错误就是, 在括号内指定了一个列却希望统计结果集的行数。 如果希望知道的是结果集的行数, 最好使用 COUNT(*),这样写意义清晰,性能也会很好。 摘自 《高性能MYSQL》第三版 6.7.1 优化COUNT()查询。