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(*)问题。

myisam和innodb中count(*)的区别

COUNT(*) for Innodb Tableshttp://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ 总结...

sql注入攻击详解(二)sql注入过程详解

在上篇博客中我们分析了sql注入的原理,今天我们就来看一下sql注入的整体过程,也就是说如何进行sql注入,由于本人数据库和网络方面知识有限,此文章是对网上大量同类文章的分析与总结,其中有不少直接引用...
  • aoxida
  • aoxida
  • 2013年04月07日 16:36
  • 1066

MySQL排序内部原理探秘

一、我们要解决什么问题 MySQL排序其实是一个老生常谈的问题了,但是我们这次想由浅入深详细说说MySQL排序模式,怎么影响MySQL选择不同的排序模式和怎么优化排序。 同时也希望通过这篇文章解决...
  • hgl868
  • hgl868
  • 2016年10月08日 19:38
  • 1638

mysql从innodb转到MyIsam的count查询效率极大提升

mysql从innodb转到MyIsam的count查询效率极大提升   近日,公司有个业务日志的表超过500万后,count(*)需要4分55秒,将该表的存储引擎从innodb转换到MyIsam...

MySQL数据库MyISAM和InnoDB存储引擎的比较

MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。 MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全...

MySQL中MyISAM引擎与InnoDB引擎性能比较

MySQL中MyISAM引擎与InnoDB引擎性能比较,基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎。MySQL表结构CREATE TABLE `myisam` (   `id` ...

mysql MYISAM INNODB 引擎比较

1.索引结构不同 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图: ...

mysql数据库引擎MyISAM和InnoDB的比较和使用场合

数据库中数据管理的一种方式,MySQL支持插入式的存储引擎,也就是说你同一数据库中的数据表可以选择不同存储引擎 查看mysql版本 mysql> select version(); +----...

mysql两种表存储结构myisam和innodb的性能比较测试

http://blog.sina.com.cn/s/blog_4aea5d8901000czy.html MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是In...

分享一片比较全介绍myisam和innodb的区别

一、简单介绍 1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:InnoDB与MyISAM中的count(*)的执行效率比较
举报原因:
原因补充:

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