目录

  • 1. 存储引擎的分类
  • 1.1 MyISAM
  • 1.2 InnoDB
  • 1.3 CSV
  • 1.4 Archive
  • 1.5 Memory
  • 1.6 Federated


1. 存储引擎的分类

MySQL 有多种存储引擎,目前常用的是 MyISAMInnoDB 这两个引擎,除了这两个引擎以为还有许多其他引擎,有官方的,也有一些公司自己研发的。这篇文章主要简单概述一下常用常见的 MySQL 引擎,一则这是面试中常被问到的问题,二则这也是数据库设计中不可忽略的问题,用合适的引擎可以更好的适应业务场景,提高业务效率。

1.1 MyISAM

  • MyISAM 是 MySQL 5.5.5 之前的默认引擎,它支持 B-tree/FullText/R-tree 索引类型。
  • MyISAM存储引擎表是由MYD(数据信息)和MYI(索引信息)组成的:
  • 锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。
  • 此引擎不支持事务,也不支持外键
  • MyISAM强调了快速读取操作。它存储表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。

1.2 InnoDB

  • InnoDB 存储引擎最大的亮点就是支持事务,支持回滚,它支持 Hash/B-tree 索引类型。
  • 锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大,索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。
  • InnoDB 中不保存表的具体行数,也就是说,执行 select count(*) from table时,InnoDB 要扫描一遍整个表来计算有多少行。
  • 支持事务,支持外键

1.3 CSV

  • CSV是文件系统存储的方式,数据以文本方式储存在文件中
  • 以CSV格式进行数据存储(逗号隔开,引号)
  • 所有的列必须都是不能为NULL的
  • 不支持索引(不适合大表,不适合在线处理)
  • 可以对数据文件直接编辑(保存文本文件内容)
  • 适合做为数据交换的中间表(能够在服务器运行的时候,拷贝和拷出文件,可以将电子表格存储为CSV文件再拷贝到MySQL数据目录下,就能够在数据库中打开和使用。同样,如果将数据写入到CSV文件数据表中,其它web程序也可以迅速读取到数据。

1.4 Archive

  • 以zlib对表数据进行压缩,磁盘I/O更少
  • 数据存储在ARZ为后缀的文件中
  • 只支持insertselect操作(支持行级锁缓冲区,可以实现高并发的插入)
  • 只允许在自增ID列上加索引
  • Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。当数据量非常大的时候Archive的插入性能表现会较MyISAM为佳。
  • 适用于日志和数据采集类应用(不支持OLTP)

1.5 Memory

  • Memory 是内存级别存储引擎,数据存储在内存中,所以他能够存储的数据量较小,它支持 Hash/B-tree 索引类型。
  • 因为内存的特性,所以所有的字段都是固定长度且不支持BLOG和TEXT等大字段。锁级别为表锁不支持事务。但访问速度非常快,并且默认使用 hash 索引
  • Memory存储引擎使用存在内存中的内容来创建表,每个Memory表只实际对应一个磁盘文件,在磁盘中表现为.frm文件。

1.6 Federated

  • 提供了访问远程Mysql服务器上表的方法
  • 本地不储存数据,数据全部放到远程服务器上面
  • 本地需要保存表的结构和远程服务器的连接信息