• 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(*)

  • 相关阅读:
    XSS漏洞
    Hadoop-Yarn-NodeManager是如何启动容器的
    ROS2系列知识(4): 理解【服务】的概念
    Python第五次作业
    Solidity 合约漏洞,价值 38BNB 漏洞分析
    【Java 进阶篇】JavaScript 表单验证详解
    MATLAB程序设计与应用 3.5 稀疏矩阵
    代码随想录 Day48 动态规划16 T647 回文子串 T516最长回文子序列
    SpringBoot
    MySQL中的JSON
  • 原文地址:https://blog.csdn.net/Zhangsama1/article/details/126672716