数据库引擎-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性能优秀些。