MyISAM与InnoDB
Last updated
Last updated
MyISAM
与 InnoDB
区别两种类型最主要的差别是InnoDB
支持事务处理与外键和行级锁。
InnoDB
可借由事务日志( Transaction Log )来恢复程序崩溃( crash ),或非预期结束所造成的数据错误;而 MyISAM
遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。
InnoDB
的修复时间,一般都是固定的,但 MyISAM
的修复时间,则与数据量的多寡成正比。
相对而言,随着数据量的增加,InnoDB
会有较佳的稳定性。
MyISAM
必须依靠操作系统来管理读取与写入的缓存,而 InnoDB
则是有自己的读写缓存管理机制。( InnoDB
不会将被修改的數據頁立即交给操作系统)因此在某些情况下,InnoDB
的数据访问会比 MyISAM
更有效率。
InnoDB
目前并不支持 MyISAM
所提供的压缩与 terse row formats(简洁的行格式) ,所以对硬盘与高速缓存的使用量较大。
当操作完全兼容 ACID(事务)时,虽然 InnoDB
会自动合并数笔连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒 200 次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁盘缓存与电池备援。当然 InnoDB
也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM
则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。
InnoDB
和MyISAM
引擎原理