innodb与myisam的对比总结

innodb:

1.事务操作
2.外键操作
3.行级锁,这是当有where条件的时候。没有where时,不知道在那一个范围进行搜索时,也是表锁.提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
4.写的速度快,这是建立在索引的更新操作上

5.InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的,在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。  
InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。  

 

myisam:

1.表级锁
2.读取速度快
3.索引压缩更好
4.更好和更快的auto_increment处理

COUNT() 在 MyISAM 表中会非常快,而在InnoDB 表下可能会很痛苦。而主键查询则在InnoDB下会相当相当的快,但需要小心的是如果我们的主键太长了也会导致性能问题。大批的inserts 语句在 MyISAM下会快一些,但是updates 在InnoDB 下会更快一些——尤其在并发量大的时候。

myisam与innodb这两种引擎对索引的实现方式也不同。

myiasm是使用B-树的结构来实现主码,非主码,唯一索引。

innodb是使用B+树结构来实现主码,用B-树来实现非主码。

使用两种的选择:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,
应该使用InnoDB表。如果执行大量的SELECT,MyISAM是更好的选择。若需要使用事务处理,
但是原来的数据表使用的是myisam,就需要改为bdb或者innodb,这样基于myisam的程序,
将类型改为innodb后,其程序不用改动…… 综上所述,任何一种表都不是万能的,只有恰当的针对业务类型来选择合适的表类型,才能
最大的发挥MySQL的性能优势。

原文地址:https://www.cnblogs.com/myblog1314/p/3118370.html