美文网首页关系型数据库
InnoDB 统计行数的性能问题

InnoDB 统计行数的性能问题

作者: zhimin_ | 来源:发表于2021-11-27 15:44 被阅读0次

mysql 统计函数一般使用 count() 函数,我们常见的写法有 count(*)count(1)count(id)count(字段名)

count() 函数是个聚合函数,当数据非 NULL 时,就会累加 1。存储引擎会遍历整张表,然后把 Server 层需要的字段返回,非 NULL 时就累加 1。

所以上述几种写法:
coung(id) 需要存储引擎需要返回 id 字段给Server 层;
count(字段名) 需要存储引擎返回对应字段给 Server 层,此时如果字段没有创建索引,那InnoDB只能扫描主键索引树;
count(1) 存储引擎直接返回统计结果给 Server层;
coung(*) 存储引擎取整行数据返回给 Server 层吗?不是的,MySQL 对此做了优化,直接返回统计结果,因为整行数据肯定为非 NULL ;

性能排名:count(字段名) < count(id) < count(1)count(*)

所以我们一般使用 count(*) 就可以。针对没有 where 条件的 SQL 语句,其中有一个优化方法就是,当数据表很大,又没有创建二级索引的时候,我们可以选择一个较小的字段作为二级索引,这样 count(*) 就会选择扫描该二级索引树,以较少的IO次数统计出行数。




MySQL8 分层结构图

MySQL8分层结构.png

【拓展】

mysql执行过程:(这张图看着像极客时间丁奇老实的课程里面的呀)


image.png

相关文章

  • mysql中innodb和myisam的区别

    MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比...

  • MySQL常用存储引擎之Innodb

    MySQL默认引擎Innodb Innodb使用表空间进行数据存储 控制参数:innidb_file_per_ta...

  • 行数统计

    用python实现简单的行数统计功能(暂未排除注释行,仅计算除却空行以外的行数) 步骤 遍历目录下文件名,获取后缀...

  • 统计行数

    package com.test.demo.test; import java.io.*; import java...

  • find 命令的妙用

    1.统计代码行数命令 统计 src 目录下所有 .js 文件的代码行数 wc 命令返回结果[行数] [词数] [字...

  • JavaScript性能优化

    1. 如何精准测试 JavaScript 性能 ● 本质上就是采集大量的执行样本进行数学统计和分析● 使用基于 B...

  • InnoDB一棵B+树可以存放多少行数据?

    一个问题****1、InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。2、为****什么是...

  • PHP统计目录下全部行数

    统计目录行数

  • Linux 常用命令

    1、统计文件行数 统计单个文件的行数:wc -l file统计单个文件的字数:wc -w file (中英文都是以...

  • git 代码统计

    统计一段时间内每个用户增删行数 统计每个用户增删行数 扫描log统计, 算上同时编辑的文件

网友评论

    本文标题:InnoDB 统计行数的性能问题

    本文链接:https://www.haomeiwen.com/subject/dethxrtx.html