SQL优化 -- 关于COUNT(*)和COUNT(1) -- 个人总结

关于COUNT(*)和COUNT(1) – 个人总结

前言

昨天闲着无事,朋友写代码用的是COUNT(*),我上去插了一嘴,这个COUNT( )如果是 * 那么是查全局的,用COUNT(1)会好一点。
然后我朋友说,你怎么知道的呢,我想了想,以前好像看过文章是这么说的。

尴尬啊,我睡不着了,我一定要看看资料。大早上又看了很多资料,不行我一定要写个博客。下次不能再被怼了


参数

  • Count(*)或者Count(1)或者Count([列])聚合函数
  • Count()定义:查找调数是否为NULL 如果为NULL就不计数,如果不为NULL就记录条数;

论证

  • select count(字段) from test;
    当字段不为空时,遍历,每读取一条记录count总数加1;
    当字段允许为null ,每读取一条记录,先判断是否为null,不为null时将count总数加1。

  • .select count(主键id) from test;
    由于id是主键,具有唯一属性,所以只需要遍历主键索引,过程中不需要判断是否null,每读取一条记录将count总数加1。

  • select count(1) from test;
    遍历整张表,但不取具体的行数据到内存,对于每返回的一行,处理器都放一个数字’1’进去,最多每一行数据汇总。

  • select count() from test;
    遍历整张表,但对于count(
    ),MySQL做了优化,不会读取具体的行数据,只要读取到一行,按行累加。

总结

正常查询情况下,使用都一样。尴尬按习惯来吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值