上次学习徐老师这篇文章《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接口与集群进行交互
- 支持事务和外键
提供高可用性、可扩展性,及高性能