count(*)为什么慢?和优化
count(*)为什么慢?
MyISAM
MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;
InnoDB
而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。
因为,innoDB要支持并发和事务
mysql的小优化
InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多对于 count(*) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL 优化器会找到最小的那棵树来遍历。在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一。
优化
可以在表上加上一个计数字段,或者设计一张单独的表来存储计数
查询记录数效率
按照效率排序的话,count(字段)<count(主键 id)<count(1)≈count(*),所以尽量使用 count(*)。
参考链接
相关推荐
chenjiazhu 2020-09-29
silencehgt 2020-09-07
Accpcjg 2020-08-02
bluetears 2020-07-05
bendan 2020-07-04
CosEmon 2020-05-20
inhumming 2020-05-17
moyekongling 2020-11-13
liuweiq 2020-09-09
mrandy 2020-08-15
minggehenhao 2020-07-04
AngelicaA 2020-07-04
wangshuangbao 2020-07-05
minggehenhao 2020-06-21
TMD咯MySQL 2020-06-16
TNTMysql工程师 2020-06-16
Iamready 2020-06-14