mysql-存储引擎

Author Avatar
丁起男 10月 09,2020
  • 在其它设备中阅读本文章

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操作
  • 只支持自增键的索引