mysql count效率

  1. 对于 count(主键 id) 来说,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返
    回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。

  2. 对于count(1) 来说,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一
    行,放一个数字“1”进去,判断是不可能为空的,按行累加。

  3. 单看这两个用法的差别的话,你能对比出来,count(1) 执行得要比 count(主键 id) 快。因
    为从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。

  4. 对于 count(字段) 来说: 如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不
    能为 null,按行累加;

  5. 如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值
    取出来再判断一下,不是 null 才累加。
    也就是前面的第一条原则,server 层要什么字段,InnoDB 就返回什么字段。
    但是 count() 是例外,并不会把全部字段取出来,而是专门做了优化,不取值。
    count(
    ) 肯定不是 null,按行累加。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值