上次学习徐老师这篇文章《MySQL架构中SQL层和存储层的介绍》,这次介绍存储引擎的知识《MySQL架构—存储引擎》,MySQL和Oracle等数据库最大的区别就是有很多存储引擎。

MySQL能够使用多种存储引擎是MySQL的一个重要特征,本篇将介绍常见的MySQL存储引擎。

InnoDB

InnoDB是MySQL的默认存储引擎,能够提供高性能、高信赖性。InnoDB具有如下主要特征:

  • 事务安全(遵循ACID)支持事务提交、回滚、崩溃恢复等能力,用于保护用户数据。
  • MVCC,InnoDB行锁,与Oracle风格一致的非锁定读
  • 表数据适用于基于主键的查询
  • 支持外键,保证参照一致性,包括多级删除与更新
  • 大数据量的场景下保证最大性能
  • 崩溃后快速恢复
  • 使用缓冲池(Buffer Pool)将数据和索引缓存在内存,支持缓冲池预热,在服务器重启后能够在缓冲池中恢复磁盘页上的数据
  • 支持表分区
  • 支持空间地理数据和索引,高效存储GIS数据
  • 全文检索,支持高效查找词和语句
  • 在线增加字段,通过更改元数据,允许在线增加字段,无需重新构建表

MyISAM

MyISAM引擎是MySQL5.5之前的默认存储引擎,支持在一些传统的系统上使用。它的检索速度非常快,并且简单,但是当服务器崩溃时,表容易发生损坏,需要使用“REPAIR TABLE”进行修复。

MyISAM引擎具有如下特征:

  • 支持全文检索索引
  • 支持空间地理数据类型和索引
  • 支持表级锁
  • 支持原生的表级备份和恢复
  • 不支持事务
  • 不支持表分区

MEMORY

MEMORY引擎将数据和索引存储在内存,服务器重启时数据将丢失。存储数据时使用固定长度格式,支持二叉树结构和哈希索引,表大小受限于--max-heap-table-size选项的值,支持表级锁,无法存储TEXT或BLOB字段。注意,MEMORY引擎的性能受到单线程执行和表级锁开销导致的争用限制,可以考虑将其转为InnoDB表,使其经常使用的数据缓存在缓冲池中,以发挥内存的优势。

ARCHIVE

ARCHIVE引擎用于将大量的数据以压缩的格式进行保存,以节省空间,通常用于存储日志。ARCHIVE具有如下特征:

  • 不支持索引
  • 支持INSERT和SELECT,但不支持DELETE、REPLACE,及UPDATE
  • 支持ORDER BY操作和BLOB字段
  • 支持除地理空间数据类型以外的其他全部数据类型
  • 行级别锁
  • 支持AUTO_INCREMENT

BLACKHOLE

BLACKHOLE引擎,顾名思义是一个"黑洞",实际起到了NULL的作用,只接受数据,但不保存数据,永远返回一个空结果集。通常用于在主从复制的情况下,保存日志、验证备份和转储文件的语法,及找到与存储引擎无关的性能瓶颈。

NDB

NDB(Network Database)也称作NDB Cluster,通过多台服务器节点,包括MySQL节点、数据节点及管理节点组成一个集群提供服务。具有如下特征:

  • 仅适用于NDB Cluster
  • 在MySQL节点进程之外运行多个进程
  • MySQL节点提供SQL接口与集群进行交互
  • 支持事务和外键
    提供高可用性、可扩展性,及高性能