InnoDB和MyISAM是在使用MySQL最常用的两个表类型,基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。但MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。可以根据数据表不同的用处是用不同的存储类型。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。
InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。
InnoDB不支持FULLTEXT类型的索引。LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like "%aaa%"。
MYSQL建表时,如果不指定数据库表的类型,会默认为MyISAM型数据库,在建表语句中如果指定ENGINE=InnoDB则数据库引擎则会是InnoDB类型。
一般情况下,指定好数据库引擎后,只要操作正确,数据库引擎是不会变化的,但是如果出现以下操作不当的情况,数据库引擎就会发生变化:
1、强制kill数据库;
2、数据库的log和实际数据不一致;
原文:http://www.cnblogs.com/babybluevino/p/3881085.html