count详述
admin
2024-03-16 14:19:47

存储引擎的不同

MyISAM引擎会把一个表的总行数记录下来,所以在执行count(*)的时候会直接返回数量,执行效率很高。

InnoDB因为增加了版本控制(MVCC)的原因,同时有多个事务访问数据并且有更新操作的时候,每个事务需要维护自己的可见性,那么每个事务查询到的行数也是不同的,所以不能缓存具体的行数,每次都需要count一下所有的行数。

count(1)、count(*)和count(列名)的区别

count(1)count(*)count(列名)
作用统计表中的所有的记录数统计表中的所有的记录数统计该字段在表中出现的次数
是否包含字段为null包含包含不包含
区别count(1)和count(*)基本没差别,实际建议count(*)

效率

无where条件情况

  1. 列名为主键,count(列名)会比count(1)快
  2. 列名不为主键,count(1)会比count(列名)快
  3. 如果表有多个列且没有主键,则count(1)的执行效率优于count(*)
  4. 如果有主键,则count(主键)的执行效率是最优的
  5. 如果表只有一个字段,则count(*)最优

有where条件情况

根据结果count一下所有的行数,其性能更依赖于where条件

简单总结

count(*) :它会获取所有行的数据,不做任何处理,行数加1

count(1):它会获取所有行的数据,每行固定值1,也是行数加1

count(id):id代表主键,它需要从所有行的数据中解析出id字段,其中id肯定都不为NULL,行数加1

count(普通索引列):它需要从所有行的数据中解析出普通索引列,然后判断是否为NULL,如果不是NULL,则行数+1

count(未加索引列):它会全表扫描获取所有数据,解析中未加索引列,然后判断是否为NULL,如果不是NULL,则行数+1

count的性能从高到低是:count(*) ≈ count(1) > count(id) > count(普通索引列) > count(未加索引列)

相关内容

热门资讯

江苏将试点,河南计划最新或20... 这两天,音乐、美术考核将会计入江苏中考总分的消息,成为不少家长关注的焦点。其实,河南省也正在制定相关...
当下大学生有着鲜明的时代个性 ... 最新或2023(历届)3月10日下午,在中国华侨公益基金会的指导下,由青羚公益基金、易观与青领会联合...
呼吁推广急救设施及教育 开展急... 所谓真的“学霸”,不仅要玩转语数英物化政,还要心怀家国聚焦“天下事”。广东实验中学高二年级的7名学生...
南京小学“弹性离校”推行一个月... 留校干什么,做作业还是搞活动?做手工、练书法、踢足球……下午3时半,本是小学低年级放学回家的时间,南...
教育部办公厅关于部分教育部重点... 依据《教育部重点实验室建设与运行管理办法》的规定,我部组织专家对部分建设期已满的教育部重点实验室(以...