码迷,mamicode.com
首页 > 其他好文 > 详细

count(*)为什么慢?和优化

时间:2020-01-08 01:08:00      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:class   mys   sam   数据量   主键索引   主键   https   ref   art   

count(*)为什么慢?

MyISAM

MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;

InnoDB

而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。

因为,innoDB要支持并发和事务

mysql的小优化

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

优化

可以在表上加上一个计数字段,或者设计一张单独的表来存储计数

查询记录数效率

按照效率排序的话,count(字段)<count(主键 id)<count(1)≈count(*),所以尽量使用 count(*)。

参考链接

https://time.geekbang.org/column/article/72775

count(*)为什么慢?和优化

标签:class   mys   sam   数据量   主键索引   主键   https   ref   art   

原文地址:https://www.cnblogs.com/zx125/p/12164221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!