栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql 的count(*)、count(1)、count(字段)在百万级别数据下的验证

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql 的count(*)、count(1)、count(字段)在百万级别数据下的验证

文章目录
      • 环境:
      • 知识点前瞻:
      • 研究过程:
        • 一、在innodb引擎下
          • 原因:
          • 结论:
        • 二、在myisam引擎下
          • 原因:
          • 结论:
      • 全文总结:

环境:

数据库版本:8.0.21

数据量级:百万级数据;

innodb引擎数据:

mysim引擎数据:

表结构:

知识点前瞻:

explain字段详解:

全字段讲解:https://blog.csdn.net/sinat_16998945/article/details/124862635

研究过程: 一、在innodb引擎下

比较结果:从上面的结果比较中,很清楚的能看到count(字段)的查询效率要高于count(*)和count(1);而带有空值的字段列又比没有空值的字段快;

原因:

不同count的用法:

  • count(主键ID)

    innodb引擎会遍历整张表,把每一行的ID值都那出来,然后返回给server层,server层拿到ID后,判断不可能为空,进行累加

  • count(1)

    同样遍历整张表,但不取值,server层对返回的每一行,放一个数字1进去,判断是不可能为空的,按行累加。

  • count(*)

    会被优化,不取出全部字段,直接按行累加(走的主键,主键不可能为空)

  • count(字段)

    分为两种情况,字段定义为not null和null:

    • 为not null时:逐行从记录里面读出这个字段,判断不能为null,累加
    • 为 null时:执行时,判断到有可能是null,还要把值取出来再判断一下,不是null才累加。
结论:

按照效率:字段>*>1

二、在myisam引擎下

比较结果:从上面的结果比较中,很清楚的能看到count(*)和count(1)的查询效率要高于count(字段);

原因:

mysiam会记录表的行数,但是遇到count(*)包含where或者某个具体字段时,也会去扫描全表;

结论:

按照效率:count(*)>count(1)>count(字段)

全文总结:

mysiam在count查询上,效率要明显高于innodb;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号