mysql中count的区别

  1. count(1)和count(*)
    1. 从执行计划来看,count(1)和count(*)的效果是一样的
    2. 当表的数据量大些时,对表分析之后,使用count(1)还要比使用count(*)用时多
    3. 当数据量在1W以内时,count(1)会比count(*)的用时少,不过也差不多
    4. 如果count(1)是聚集索引时,那肯定是count(1)快,但是差的很小
    5. 因为count(* )会自动优化到指定到哪一个字段,所以没必要去count(1),使用count(* ),sql会帮你完成优化的
    6. 因此,在有聚集索引时count(1)和count(*)基本没有区别
  2. count(1)和count(字段)
    1. count(1)会统计表中的所有的记录数,包含字段为null的记录
    2. count(字段)会统计该字段在表中出现的次数,忽略字段为null的情况,即不统计字段为null的记录
  3. count(*)和count(1)和count(字段)的区别
    1. 执行效果上
      1. count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略null的值
      2. count(1)用1代表代码行,在统计结果的时候,不会忽略NULL值
      3. count(字段):只包括列名的那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为null时,不统计
    2. 执行效率上
      1. 列名为主键时,count(列名)会比count(1)快
      2. 列名不为主键时,count(1)会比count(列名)快
      3. 如果表多个列并且没有主键,则count(1)的执行效率优于count(*)
      4. 如果有主键,则select count(主键)的执行效率最优
      5. 如果表只有一个字段,则select count(*)最优
相关推荐
蒸蒸yyyyzwd17 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
银发控、18 小时前
MySQL联合索引
数据库·mysql
予枫的编程笔记18 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
程序员徐师兄18 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
RANCE_atttackkk19 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
五岳19 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
一起养小猫19 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
世界尽头与你19 小时前
(修复方案)CVE-2023-22047: Oracle PeopleSoft Enterprise PeopleTools 未授权访问漏洞
数据库·安全·oracle·渗透测试
韩立学长19 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
zhougl99620 小时前
Java 所有关键字及规范分类
java·开发语言