InnoDB与MyISAM中的count(*)的执行效率比较

原创 2015年07月07日 08:58:56
今天同学们在群里讨论oracle的count(*)与count(1)的问题,正好提到mysql的情况。我突然想到自己遇到的问题:在myisam引擎执行count(*)速度非常快,而且执行速度与记录条数无关,而innodb却不是这样,记录越多,速度越慢。 

    于是做了一个实验,在一个有8000W条记录的innodb表执行了一下 select count(*) from table 。 果然一直等待,大概8分多后出来结果。马上再次执行相同的语句,用时大约22秒。马上执行第三次,还是约22秒。 

    于是我猜想innodb没有把记录数保存起来,而是做了实时统计,所以导致速度比较慢。第二次、第三次相对较快是因为高速缓存的原因。于是打电话咨询DBA同学。经过DBA同学的专业解答,我明白了:我猜对了,呵呵。所以,以后要注意在innodb中count(*)的问题,尽量避免吧……除非能确保该表始终保持很少的记录数。 

    另外,在网上查了一些资料: 

   
引用

InnoDB Pitfalls 
However, all is not rosy with InnoDB. Because of its transactional nature, it has bottlenecks of its own. On MyISAM, doing a query that does SELECT COUNT(*) FROM {some_table}, is very fast, since MyISAM keeps the information in the index. 

On InnoDB, this info is not stored in an index, and even the index and the data are kept in the same file. So, doing the same query on a table can incur a significant performance penalty. 

To check what overhead this has, I wrote a simple test benchmark code. I duplicated a client node table that has 20,243 rows from MyISAM to InnoDB. 

On a quiescent AMD 64 machine with MySQL server 5.0.24, doing a SELECT COUNT(*) FROM node takes 0.835 milliseconds on MyISAM, while on InnoDB it takes 12.292 milliseconds! 


记录一下,innodb引擎的count(*)问题。

mysql的innodb引擎的count(*)陷阱

今天同学们在群里讨论oracle的count(*)与count(1)的问题,正好提到mysql的情况。我突然想到自己遇到的问题:在myisam引擎执行count(*)速度非常快,而且执行速度与记录条数...
  • zhaoxuejie
  • zhaoxuejie
  • 2014年09月03日 11:40
  • 1373

myisam和innodb中count(*)的区别

COUNT(*) for Innodb Tableshttp://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ 总结...
  • gtuu0123
  • gtuu0123
  • 2010年04月11日 16:44
  • 2763

为什么MyISAM会比Innodb的查询速度快。

为什么MyISAM会比Innodb的查询速度快。
  • leyangjun
  • leyangjun
  • 2015年11月08日 20:33
  • 4232

MySQL查询优化之COUNT()

COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是MySQL中最容易被误解的前10个话题之一,在网上随便搜索一下就能看到很多错误的理解,可能比我们想象的多得多。在做优化之前,先来看看CO...
  • ljfrocky
  • ljfrocky
  • 2015年08月02日 17:14
  • 4491

mysql-查询解析,MYISAM、INNODB引擎

mysql的若干个子系统 网络连接&网络通讯协议:主要负责网络通讯连接 线程、进程、内存分配:管理mysql线程、内存分配 查询解析&查询优化:查询解析优化 存储引擎接口:统一的存储引擎调用接口 各类...
  • Wake_me_Up123
  • Wake_me_Up123
  • 2017年03月10日 15:23
  • 802

MySQL存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试

InnoDB和MyISAM简介 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩...
  • fu_zk
  • fu_zk
  • 2013年08月29日 00:03
  • 6280

Mysql数据库Innodb与MyISAM的性能对比测试

由于近期有个项目对系统性能要求很高,技术选型上由于种种原因已经确定使用Mysql数据库,接下来就是要确定到底使用哪种存储引擎。我们的应用是典型的写多读少,写入内容为也很短,对系统的稳定性要求很高。所以...
  • ghosc
  • ghosc
  • 2012年02月03日 12:24
  • 9961

MySQL创建数据表时设定引擎MyISAM/InnoDB

MySQL创建数据表时设定引擎MyISAM/InnoDB
  • renwudao24
  • renwudao24
  • 2016年08月06日 16:43
  • 12798

关于mysql innodb count(*)速度慢的解决办法

关于mysql innodb count(*)速度慢的解决办法http://www.sphinxsearch.org/mysql-innodb-countinnodb引擎在统计方面和myisam是不同...
  • xinew
  • xinew
  • 2010年07月01日 19:44
  • 1280

InnoDB与MyISAM中的count(*)的执行效率比较

今天同学们在群里讨论oracle的count(*)与count(1)的问题,正好提到mysql的情况。我突然想到自己遇到的问题:在myisam引擎执行count(*)速度非常快,而且执行速度与记录条数...
  • gsls181711
  • gsls181711
  • 2015年07月07日 08:58
  • 1221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:InnoDB与MyISAM中的count(*)的执行效率比较
举报原因:
原因补充:

(最多只允许输入30个字)