Innodb引擎中Count(*)

Posted Final_static_杨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Innodb引擎中Count(*)相关的知识,希望对你有一定的参考价值。

select count(*)是mysql中用于统计记录行数最常用的方法,count方法可以返回表内精确的行数。

在某些索引下是好事,但是如果表中有主键,count(*)的速度就会很慢,特别在千万记录以上的大表。

所以、如果是用Innodb引擎的时候,使用select count(*)语句时,建议采用二级索引速度会比用主键索引更快。

在InnoDB引擎中,当我们通过二级索引统计数据的时候,无需扫描数据文件(二级索引存储指定字段的索引,实际的指向位置是主键索引。);而通过主键索引统计数据时,由于主键索引与数据文件存放在一起,所以每次都会扫描数据文件,所以主键索引统计没有二级索引效率高。

而myisam是不同的,Myisam内置了一个计数器,所以在使用 select count(*) from table 的时候,直接可以从计数器中取出数据。

所以,在myisam引擎执行count(*)速度非常快,而且执行速度与记录条数无关,而innodb却不是这样。

 

以上是关于Innodb引擎中Count(*)的主要内容,如果未能解决你的问题,请参考以下文章

Mysql Innodb存储引擎 select count 太慢,怎么优化

ThinkPHP5查询当前表引擎,以及InnoDB表引擎下count(*)查询效率低的问题

InnoDB和MyISAM存储引擎的区别

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

替代 COUNT 用于 innodb 以防止表扫描?

为啥select count(_) from t,在InnoDB引擎中比MyISAM 慢