• MySQL中你不知道的count(主键)、count(字段)、count(1)和count(*)的区别


    当我们要对表中的数据进行统计时,就要使用到count()函数,那么count(主键)、count(字段)、count(1)和count(*)这些都能对表数据进行统计,但是他们有什么区别呢?

                                                                      区别

    count(主键)InnoDB 引擎会遍历整张表,把每一行的 主键id 值都取出来,返回给服务层。服务层拿到主键后,直接按行进行累加(主键不可能为nul)
    count(字段)没有not nul 约束: InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为null,计数累加。
    有not null 约束: InnoDB 引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,直接按行进行累加。
    count(1)InnoDB引擎遍历整张表,但不取值。服务层对于返回的每一行,放一个数字“1”进去,直接按行进行累加
    count(*)InnoDB引擎并不会把全部字段取出来,而是专门做了优化,不取值,服务层直接按行进行累加

    所以从以上表格中我们可以看到,

    count(主键):虽然主键是一个索引,遍历速度应该很快,但是在count(主键)中它会有一个累加的操作

    count(字段):不仅要把每行的字段值取出来,还要判断是不是null,最后在进行一个累加操作,所以它是会忽略字段为null 的情况,即不统计字段为null 的记录

    count(1):遍历整张表,但是如果有null值的话,它是不会忽略的,也就是会包含null的记录

    count(*):专门做了优化,不会进行取值操作。相当于求记录总行数,在统计结果的时候,不会忽略NULL

    所以按照效率排序的话,count(字段)< count(主键 id) < count(1)  count(*),所以尽量使用 count(*)

  • 相关阅读:
    C语言的由来与发展历程
    CVPR2022 | 重新审视池化:你的感受野不是最理想的
    概述Linux内核驱动之GPIO子系统API接口
    文件不小心删除了怎么恢复?实用的两个小妙招
    ROC 曲线:健康背景下的应用和解释
    ctf:kali工具ettercap,setoolkit
    CompletableFuture学习总结
    高性能定时器实现
    SQLite的DBSTAT 虚拟表(三十六)
    Javascript学习之路--基础篇
  • 原文地址:https://blog.csdn.net/xiaoheihai666/article/details/127834602