枪爷和美丽 发表于 2023-5-6 03:02:26

count(列名)、count(1)和 count(*)有什么区别?

在MySQL中,这几个都是统计操作,很多人在使用的时候,都使用的是count(1),这有没有问题?使用正确?达到了统计效果?
我们从效果和效率两方面来分析下
执行效果

count(*) 包括了所有的列,在统计时不会忽略列值为null的数据
count(1) 用1表示代码行,在统计时不会忽略列值为null的数据
count(列名)在统计时,会忽略列值为空的数据,就是说某个字段的值为null时不统计
简单来说,count(*) 和count(1) 都统计null列,count(列名)不统计null列
执行效率

1、InnoDB引擎

count(字段) < count(1) = count(*)
InnoDB通过遍历最小的可用二级索引来处理select count(*) 语句,除非索引或优化器提示指示优化器使用不同的索引
如果二级索引不存在,则通过扫描聚簇索引来处理
2、MyISAM引擎


count(字段) < count(1)
页: [1]
查看完整版本: count(列名)、count(1)和 count(*)有什么区别?