美文网首页mysql
mysql之count(*)

mysql之count(*)

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-04-11 12:24 被阅读0次

在不同的 MySQL 引擎中,count(*) 有不同的实现方式。

  • MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;即没有where条件的过滤情况下,直接返回总数。
  • 而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。

对于 count(字段) 来说:

  • 如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不能为 null,按行累加;
  • 如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才累加。
  • count(*)是例外,并不会把全部字段取出来,而是专门做了优化,不取值。count(*) 肯定不是 null,按行累加。

InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL 优化器会找到最小的那棵树来遍历。在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一。

InnoDB的总行数,统计结果显示:


image.png

相关文章

  • mysql之count(*)

    在不同的 MySQL 引擎中,count(*) 有不同的实现方式。 MyISAM 引擎把一个表的总行数存在了磁盘上...

  • mysql之count问题

    相信大家都有听过,MyISAM 计算count值是非常快的,甚至有很多文章说MyISAM count值的计算快于I...

  • MySQL之count探究

    count()功能: 1、统计某个列的值的数量,在统计列值时要求列值是非空的(不统计NULL)即:在COUNT()...

  • 【MySQL】count(*) count(字段) count(

    准备 创建库表 创建存储过程 生成数据 简介 count() 是MySQL内置函数,用来统计字段中非NULL的数量...

  • MySQL count(*) 慢吗

    原文《MySQL实战45讲》 count(*)的实现方式 在MySQL中,不用的引擎对count(*)有不同的实现...

  • 14 . count

    count(*) 的实现方式 讨论的是没有过滤条件的 count(*)在不同的 MySQL 引擎中,count(*...

  • MySQL - count(*)

    count(*) 的实现方式 在没有过滤条件的 count()下,在不同的 MySQL 引擎中,count() 有...

  • MySQL count

    不同引擎count(*)实现方式不同 MyISAM引擎把一个表的总行数记录在了磁盘上,执行count(*)会直接返...

  • 【MySQL】count

    count():用来统计表中记录的一个函数,返回符合条件的行数。count(*):返回表中的记录数(包含所有列),...

  • mysql count(*) count(1) count(主键

    count(*) 的实现方式 你首先要明确的是,在不同的 MySQL 引擎中,count(*) 有不同的实现方式。...

网友评论

    本文标题:mysql之count(*)

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