我一直想知道这三种使用COUNT
SQL 的方式有什么区别(我也不知道根据使用的数据库驱动程序是否有区别)。
例如在 MySQL 中,如果我有一个包含 100 条记录的表并且我这样做:
SELECT COUNT(*), COUNT(1), COUNT(columna) FROM tabla;
它向我抛出了正确计数的三列。
这三种使用方式有什么区别COUNT
?
根据客观测试,是否有其中一种更值得推荐,或者使用任何一种形式都没有关系?
我一直想知道这三种使用COUNT
SQL 的方式有什么区别(我也不知道根据使用的数据库驱动程序是否有区别)。
例如在 MySQL 中,如果我有一个包含 100 条记录的表并且我这样做:
SELECT COUNT(*), COUNT(1), COUNT(columna) FROM tabla;
它向我抛出了正确计数的三列。
这三种使用方式有什么区别COUNT
?
根据客观测试,是否有其中一种更值得推荐,或者使用任何一种形式都没有关系?
关于结果:
count(*)
和之间没有区别count(1)
,对于每个返回的行,它都将计数为 1。但
count(columna)
它不同:它不会计算该列所在的行NULL
。此外,在后一种情况下,您只能计算不同的:
在性能方面,很难说一个是否比另一个更好,因为这取决于它是单独使用还是与更多字段一起使用以及数据库管理器:
count(*)
在 Oracle 和 PostgreSQL 中(可能还有其他,但我不知道)它被检测为“微不足道”的操作,这些值被认为是不相关的,因此使用表索引可以在不实际循环的情况下获取值行。与 count(1) 的行为类似(每一行的结果都是一个不为空的常量),因此无需获取数据即可知道是否有 NULL 值要丢弃。COUNT(*)
统计查询的记录,SELECT
将查询列保存在内存中,也就是说,如果查询有 20 列和 300 条记录,它会将 6000 个空间与其数据一起保存在内存中。这将延迟查询的处理。COUNT(columna)
计算“列”不为 NULL 的记录COUNT(n)
(其中n是一个数字)将值n(在这种情况下)作为一个单列表,其中每条记录的值对于每条记录都是n,无论它是否有 20 列。对于第一种情况的示例,它只有 300 * 1 = 300 个值,这样可以更快地处理查询。查看参考蟾蜍世界
COUNT(*)
计算 SELECT 的记录。COUNT(columna)
计算“列”不为 NULL 的记录(列不为 NULL)COUNT(1)
(带数字)我没用过。微软帮助不考虑它(链接)我希望它为你服务。Atte.,亚历克斯·爱德华多·里维拉·埃雷拉。