日期:2014-05-16  浏览次数:20486 次

数据库引擎-MySQL的MyISAM和InnoDB

MyISAM

默认存储引擎,基于传统的ISAM类型。

ISAM:Indexed Sequential Access Method (有索引的顺序访问方法),它是存储记录和文件的标准方法。

每张MyISAM表被存放在三个文件:

  • frm文件存放表格定义。
  • 数据文件是MYD(MYData)。
  • 索引文件是MYI(MYIndex)引伸。

MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。

MyISAM特点:

  • 具有检查和修复表格的大多数工具。
  • MyISAM表格可以被压缩。
  • 支持全文搜索。
  • 不是事务安全的,也不支持外键。

缺点:

  • 事务回滚将造成不完全回滚

InnoDB

具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB是为处理巨大数据量时的最大性能设计。

InnoDB特点:

  • InnoDB不支持FULLTEXT类型的索引。
  • InnoDB中不保存表的具体行数。执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。
  • 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
  • DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
  • LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
  • InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

多并发操作时,一般情况下InnoDB比MyISAM性能优秀些。