tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 设计相关

  • 运行相关

    • 常用命令跟重要命令
    • MySql中的各种锁
    • 数据库出现死锁如何排查解决
    • MySql中的MVCC和当前读、快照读
    • 几种count的性能比较
      • 谁的性能更好
        • 各自的作用
  • 事务相关

  • 表设计实战系列

  • 分库分表

  • 框架使用

  • 常用sql跟关键字

  • 安装与卸载相关

  • 《MySql》笔记
  • 运行相关
EffectTang
2025-03-20
目录

几种count的性能比较

# 几种count的性能比较

在 MySQL 中,count() 函数用于统计一列的行数或者非 NULL 值的个数。COUNT() 可以用在不同的形式中,包括 COUNT(1)、COUNT(*) 和 COUNT(列)。

# 谁的性能更好

既然count()函数,有多种形式,那它们总该有一些区别吧,或者说count(列名)、count(id)、count(1)、count(*)到底谁的性能高。

网上有一种普遍的效率排序关系:

count(普通字段) < count(id) < count(1) = count(*)
1

接下来我们尝试解释下:

count(1) 和 count(*) 性能之所相近,是因为,它的底层经过(mysql)优化完之后,它都是选择这个索引数去进行遍历进行计算的。

如果有主键作用的情况下,他们会用主键索引去进行计算。我们可以通过explain关键字,来验证一下这个说法。

而count(id)小于它们,则是因为:

这两个他们去遍历主键索引数,他们只需要遍历主键索引树的这个数,遍历一个就加一,遍历一个就加一。那么这个看的ID为什么这个性能说小于它俩呢?是因为这个count(id)去遍历这个索引树,它遍历这个参数之后,要把这个ID给它返回回去,然后再进行这个count加加操作,它有一个返回主键ID这么一个操作,所以网上会说这个count(id)要小于这个count(1)和count(*)。

而普通字段之所以慢,则是因为它没有走索引,它是全表扫描。

但某些特殊情况,count(普通字段)性能可以也跟其余三者差不多。

# 各自的作用

上次更新: 2025/04/23, 16:23:16
MySql中的MVCC和当前读、快照读
MySql的事务4个隔离级别

← MySql中的MVCC和当前读、快照读 MySql的事务4个隔离级别→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式