| MyISAM | InnoDB |
构成上的区别: | 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。 数据文件的扩展名为 .MYD(MYData) 索引文件的扩展名是 .MYI(MYIndex) | 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB表的大小只受限于操作系统文件的大小,一般为2GB |
事务处理上方面: | MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持 | InnoDB提供事务支持事务, 外部键等高级数据库功能 |
SELECT UPDATE,INSERT,Delete操作 | MyISAM表格可以被压缩, 而且它们支持全文搜索 不支持热备,不支持事务
执行大量的SELECT,MyISAM是更好的选择 | 1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 3. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用 |
对AUTO_INCREMENT的操作 | 每表一个AUTO_INCREMEN列的内部处理。 | 如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。 |
表的具体行数 | select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的 | InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行 InnoDB不支持full text类型的索引。
|
锁 | 表锁 | 提供行锁(locking on row level),提供与Oracle类型一致的不加锁读取(non-locking read in |
备份 扩展 | MyISAM不支持热备 MyIASM是IASM表的新版本,有如下扩展: 1) 二进制层次的可移植性。 2) NULL列索引 3) 对变长行比ISAM表有更少的碎片 4) 支持大文件 5) 更好的索引压缩 6) 更好的键吗统计分 7) 更好和更快的auto_increment处理 | InnoDB支持热备,但是需要专门的工具 |