InnoDB
从mysql5.5之后,mysql的默认内置存储引擎已经是InnoDB了
特点
- 灾难恢复性比较好
- 支持事务。默认的事务隔离级别为可重复读(可避免脏读、不可重复读,但不能避免幻读)
- 使用的锁粒度为行级锁
- 支持外键
- 配合一些热备工具可以支持在线热备份
- 在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询速度
- 底层数据结构为b+树,树的每个节点对应innodb的一个page,page大小是固定的,一般为16k。其中非叶子节点只有key,叶子节点包含完整数据
- 将数据分为.frm(表结构)和.ibd(数据和索引)两个文件进行存储
MyISAM
在mysql5.5之前,MyISAM是mysql的默认存储引擎
特点
- 不支持事务
- 不支持外键,如果添加外键,不会提示错误,只是外键不起作用
- 对数据的查询只会缓存索引,不会像InnoDB一样缓存数据,而是利用操作系统本身的缓存
- 默认的锁粒度为表级锁,所以并发性很差。加锁块,锁冲突比较少,所以不太容易发生死锁
- 数据库所在的主机如果宕机,myisam的数据文件容易损坏,而且难恢复
- 会保存表的具体行数,执行count(*)时会进行优化
- 将数据分为.frm(表结构)、.MYD(数据)和.MYI(索引)三个文件进程存储
MEMORY
将数据存在内存中,和redis思想类似,为了提高数据的访问速度
特点
- 支持的数据类型有限制,比如不支持text和blob类型,对于字符串类型的数据,只支持固定长度的行,varchar会被自动存储为char类型
- 支持锁粒度为表级锁
- 由于数据是存储在内存中,所以在服务器重启之后,所有数据都会丢失
- 默认使用hash索引(支持散列索引和b树索引)
ARCHIVE
适合的场景有限,由于支持压缩,故主要是用来做日志、流水等数据的归档
特点
- 支持Zlib压缩,数据在插入表之前,会先被压缩
- 仅支持select和insert操作
- 只支持自增键的索引