我说 SELECT COUNT(*) 会造成全表扫描,面试官说拜拜!

SELECT COUNT(*)

通过最小索引树遍历后不需要返回行数据直接+1

SELECT COUNT(1)

count(1)是需要返回数据的但是不做为空判断+1

SELECT COUNT(字段)

count(字段)是需要返回数据的但是不做为空判断+1,相比SELECT COUNT(1)占用的内存更多

按照效率排序的话:
count(字段)<count(主键id)<count(1)≈count()
所以我建议你,尽量使用count(
)。

由上面比较可以看出,由于Mysql优化器的原因,SELECT COUNT(*)*不是全表扫描的,直接走最短索引树

也由于优化器的原因,Mysql会自动选择选择(这也就造成与我们想的不一样的情况——SQL语句不走索引)

参考:
https://mp.weixin.qq.com/s/SNRvdmyS57oWS_CyYKVvSA
林晓斌的Mysql 45讲中的 —— 14 | count(*)这么慢,我该怎么办?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值