赞
踩
COUNT(列名)
、COUNT(1)
和COUNT(*)
在MySQL中都是用来统计行数的聚合函数,但它们之间存在一些细微的差别:
COUNT(列名):
COUNT(列名)
时,MySQL只会计算那些指定列中非NULL值的数量。这意味着,如果某行中该列的值为NULL,则不会被计入总数。COUNT(1):
COUNT(1)
实际上并不关心列的值,它是一个常量表达式,每次计算都返回1。因此,它被用来统计表中的所有行,包括含有NULL值的行。COUNT(*)
相似,因为它不需检查列的具体内容。COUNT(1)
通常是为了明确表示你只是在计数,而不是关心特定列的值。COUNT(*):
COUNT(*)
是最常见的用法,它计算表中的所有行,无论行中的列值是否为NULL。COUNT(*)
会比COUNT(1)
慢,因为它理论上需要访问每一行的所有列。但在现代MySQL尤其是InnoDB存储引擎中,优化器足够智能,通常能优化COUNT(*)
操作,使得其性能与COUNT(1)
接近,尤其是在没有WHERE子句或使用覆盖索引的情况下。COUNT(*)
甚至可以更快,因为它可以直接从索引中获取行数,而无需访问实际的行数据。总结来说,选择哪种形式主要取决于你的具体需求:
COUNT(*)
和COUNT(1)
都是好选择,两者在现代MySQL中性能差异不大。COUNT(列名)
。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。