COUNT(1) 和 COUNT(*)表示的是直接查询符合条件的数据库表的行数。而COUNT(列名)表示的是查询符合条件的列的值不为NULL的行数。
COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL对他进行了很多优化,在MySQL中比较常用的执行引擎有InnoDB和MyISAM,而MyISAM中会直接把表的总行数单独记录下来供COUNT(*)查询,InnoDB则会在扫表的时候选择最小的索引来降低成本。当然,这些优化的前提都是没有进行where和group的条件查询。- 在InnoDB中
COUNT(*)和COUNT(1)实现上没有区别,而且效率一样,但是COUNT(字段)需要进行字段的非NULL判断,所以效率会低一些。 COUNT(*)是SQL92定义的标准统计行数的语法,并且效率高,所以请直接使用COUNT(*)查询表的行数!
本文详细解释了SQL中COUNT(1), COUNT(*) 和 COUNT(列名) 的区别及使用场景,尤其是在不同数据库引擎如InnoDB和MyISAM下的性能表现。COUNT(*) 作为标准语法,因其高效性被推荐用于查询表的行数。
4万+

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



