count(*) count(1)

本文详细解释了SQL中count(*)和count(f)的区别及其应用场景。count(*)用于统计表中的所有行数,包括全为null的行;而count(f)则统计特定列f中非null值的数量。此外还讨论了不同情况下的性能表现。

count(*) count(f)
count(*)统计表的行数,即使某一行全为null也会统计进来.
count(f) 统计f列非空的行数量.
明确了定义后,我们就能两者其实面向不同的需求层面.

性能问题:
count(*)要的是表的行数,而不管null问题,获取行数有几个渠道,全表扫(慢),走索引(快),走索引的问题是,空值是不会建索引的
所以从可为空的索引是无法获取到正确行数信息的.这样count(*)只能去全表扫描.
另外即使索引是唯一索引但是没有设定not nul属性,则数据库无法从索引获取到表的所有行数信息,只能全表扫描
这种情况下,count(f),如果f是唯一索引,则可以通过索引得到行数(count(f)因为他统计f列非空的行数量),效能自然高过count(*)
但是count(*)和count(f)的需求是不同的,所以这种比较其实没有意义.
如果表存在唯一非空索引(比如主键),则count(*)和count(f)性能相同.(f是主键)
count(1)是count(f)的另外一种写法而已.

转载于:https://www.cnblogs.com/reachlins/p/8761443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值