mysql常用的存储引擎有InnoDB、MYISAM、Archive、Memory
InnoDB
支持事务以及外键,其他的三种存储引擎是不支持的。锁的粒度是行锁,最大存储
容量为64TB,采用MVCC来支持高并发的。默认的隔离级别是可重复读,并通过间隙
锁来防止幻读的。另外最关键的是它支持热备份,其他存储引擎是不支持的,集群
的一般选择这种引擎。
MYISAM
MYISAM存储引擎的锁粒度是表锁。物理文件结构是frm文件存储表的结构,myd文件
存储表的数据,myi文件存储索引。这三个文件分别放在不同的位置,以获取更快的
查询和插入的速度。最大的索引数为64,索引可以为null值,这个值占0~1个字节。
每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的
时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的
AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快。
Archive
Archive引擎支持高并发的批量插入,但是不支持事务、索引和缓存,所以带有不
安全性。由于数据可压缩,所以占空间比较小。
Memory
数据存在内存中,所以数据查询起来的速度很快,但如果断电或者宕机等外界因素
的存在,数据会丢失。不支持BLOB或TEXT类型的列,
每行的长度是固定的,所以会使部分内存浪费。
####使用场景
InnoDB由于支持事务、热备份等特性,所以对数据严谨性较高的,比如支付、订
单、mysql集群等场景使用。
MYISAM和archive,如果数据表主要用来插入和查询记录,比如日志的记录,那么
用MYISAM或者archive比较合适。
Memory主要用于创建临时表,存放查询的中间结果,对数据安全性是否会出现数
据丢失等要求不高时,可以用Memory存储引擎。