• count(1)、count(*)、count(字段)、count(主键)的区别


    三者的计数方式

    count(1):
    count(1)会统计表中所有的记录数,包括字段为null的记录。

    count(*):
    count(*)包括了所有列,相当于行数,在统计结果的时候,不会忽略列值为null的,即使某一行的所有列全为null也不会忽略当前行,即最终返回行数。

    count(字段):
    count(字段)会统计该字段在表中出现的次数,忽略字段为null的情况。即如果该字段为null,那么不进行统计。

    三者的执行效果

    count(1):
    count(1)忽略了所有列,每一列都被使用1来代表,在统计结果的时候,不会忽略列值为null的行,即使某一行所有列都为null,也不会忽略当前行。

    count(*):
    count(1)包括了所有列,相当于行数,在统计结果的时候,不会忽略列值为null的行,即使某一行所有列都为null,也不会忽略当前行。

    count(字段):
    count(字段)只包括列名那一列,在统计结果的时候,会忽略列值为空的技术,即如果某一列的当前字段为null,那么不对当前行进行计数。

    三者的执行效率

    字段为主键时:
    count(字段) > count(1)
    原因:当某一字段为主键,MySQL自动为当前字段列添加主键索引。主键索引使用B+Tree实现,相比于将每一列都设置为1然后计数效率更高。

    字段不为主键:
    count(字段) < count(1)
    原因:当字段不为主键时,没有主键索引,那么对字段进行count操作,可想而知,首先需要先判断当前字段是否为null,然后再进行计数,而count(1)显然没有这么繁琐。

    表有多列且没有主键(基本不会出现):
    count(1) ≈ count(*)
    MySQL底层对count( * )进行了优化 ,使得其拥有较高的效率。

    有主键:
    当有主键的时候,select (主键)的执行效率最高。

    表有且仅有一个字段:
    如果表只有一个字段,那么select (*)的效率最高。

    总结:
    执行效率上, count(* )> count (1) > count(主键id) >count(字段)
    因此尽量使用 count(*)

  • 相关阅读:
    shopee店铺销量突然下降怎么办——扬帆志远
    第三期:gRPC客户端与服务端连接失败后,是否会有重试机制?
    视频号起号涨粉神器,用好这个工具你也可以
    centos7.9 postgresql 16.0 源码安装部署
    1.2 信息系统开发方法
    Spring Boot对接RocketMQ示例
    Autoformer
    Linux常用命令
    【机器学习】05. 聚类分析(代码注释,思路推导)
    人体神经元细胞分布图片,神经元人体分布大图
  • 原文地址:https://blog.csdn.net/Zhangsama1/article/details/126672716