MySQL默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择不同的存储引擎提高应用的效率。
MySQL 5.0支持的存储引擎包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster|、ARCHIVE、CSV、BLACKHOLE、FEDERATED 其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
创建表时如果不指定存储引擎,那么系统就会使用默认存储引擎,MySQL5.5之前的默认存储引擎时MyISAM,5.5之后改为了InnoDB。
1.MyISAM
MyISAM是MySQL默认的存储引擎。MyISAM不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或以查询插入为主的应用可以参考使用该引擎。每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,但扩展名分别是 .frm .MYD .MYI ;MyISAM的表支持3种不同的存储格式,分别是 静态表、动态表、压缩表。
2.InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些。并且会占有更多的磁盘空间以保留数据和索引。
对于InnoDB表,自增长列必须是索引,如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的。
InnoDB还可以使用外键约束,在创建外键时,要求父表必须有对应的索引,子表创建外键的时候也会自动创建对应的索引。
InnoDB存储表和索引有以下两种方式:
(1)使用共享表空间存储
(2)使用多表空间存储