Skip to content

14 count为啥那么慢

聚合笔记

InnoDB 默认隔离级别是 可重复读。

image-20210316205504064

在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一。

  • InnoDB 中 count 操作会导致对全表的便利(scan table),复杂度位:O(n);
  • 对于 SQL 中的 count() 而言。count() 是聚合函数,无论计数条件是什么,都会一行一行去匹配;
  • InnoDB 是索引组织表,主键索引树叶子结点存储的是数据,对于普通索引叶子结点记录的是主键值,所以普通索引比主键索引小的多;
  • 按照效率排序的话,count(字段)<count(主键id)<count(1)≈count(*)