计数函数有几种写法,count(1),count(字段),count(*),他们的区别如下:
COUNT(expr) ,返回SELECT语句检索的行中expr的值不为NULL的数量。COUNT(*) 的统计结果中,会包含值为NULL的行数。基于这个条件,count(1),count(*)里面都有明确的值,将返回所有符合查询条件的数据;count(字段)会在查询条件的基础上过滤字段为NULL的数据。
初次看到这样的解释还是比较迷惑,简单理解可以把COUNT里面的值当做一个查询条件,当为1或者*的时候相当于where 1=1,当为某个字段的时候相当于增加了一个条件where 字段 is not null。
count(*)为标准的sql语法,在这个语句上专门做了优化,如果没有查询条件的情况下,count(*)会直接从元数据表中读取记录的数据行数,这是最快的。如果有查询条件执行器会选择最优的路径的执行,例如索引优先,非聚集索引优先等。
count(1)和count(*)在各个方面没有差别,是一样的执行方式;count(字段)会执行全表扫描并且增加字段非空条件;推荐使用count(*),因为是标准语法。
本文详细解析了SQL中的计数函数count的各种写法及其应用场景,包括count(1), count(*), 和 count(字段)的区别。并通过实例说明了它们在执行效率和数据过滤方面的差异。
7万+

被折叠的 条评论
为什么被折叠?



