「MySQL」- 存储引擎

存储引擎是MySQL的组件,用于处理对不同表类型SQL操作。

MySQL使用可插拔的存储引擎架构,可以在MySQL运行时加入或卸载存储引擎。InnoDB是默认的存储引擎,并且是Oracle推荐使用的,除非有特殊的用例。

查看支持的存储引擎

使用SHOW ENGINES查看数据库支持的存储引擎,如下输出,Support项表示是否支持,YES支持,NO不支持,DEFAULT默认:

mysql> show engines \G;
*************************** 1. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
9 rows in set (0.00 sec)

InnoDB

这是 MySQL 5.7 中的默认存储引擎。InnoDB是事务安全(ACID兼容)的存储引擎,具有提交、回滚、崩溃恢复功能以保护用户数据。 InnoDB行级锁(不升级到更粗粒度的锁)和Oracle风格一致性非锁定读取增加了多用户并发和性能。InnoDB将用户数据存储在聚簇索引中,以减少 基于主键的 常见查询的I/O。为了保持数据完整性,InnoDB还支持FOREIGN KEY参照完整性约束。更多详细的内容,请参照官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html

MyISAM

MyISAM 类型的表有一个小足迹(footprint)。
‘表级锁’限制了读/写工作量的性能,因此它经常被用于只读或在web和数据仓库配置多读取的工作中。
MyISAM将数据写入内存,然后等待系统将数据刷到磁盘。

Memory

将数据存储到内存中,适用于那些需要快速查找不重要数据的环境。以前也叫做 HEAP引擎。使用案例正在减少;
InnoDB使用他的缓冲池内存区域提供了一个通用的持久的方式让数据保存到内存中,并且 NDBCLUSTER 提供了快速的 key-value 查找,用于查找海量分布式数据。

CSV

CSV 就是大家知道的那个cvs,表是文本文件,数据用逗号分割。CSV表让你导入或转储数据到CSV格式,交换数据的脚本和应用程序读取和写入相同的格式。CSV并不支持索引,通常CSV用于数据的导入导出。

Archive

Archive存储引擎的表不支持索引,数据是压缩的,主要用于存储和检索大量的很少引用历史,存档,或安全审计信息。

Blackhole

Blackhole不是用于存储数据的,类似于Unix中/dev/null。对该引擎类型的表查询,总是返回空。在DML语句发送到从服务器上时,这种表用在复制配置上,但是主服务器不保存它自己的数据拷贝。

NDB (NDBCLUSTER)

集群数据库引擎,适用于高可用的应用环境。

Merge

将一系列相同的MyISAM表进行逻辑分组,然后作为一个Object来引用。在VLDB环境中很好,例如数据仓库环境。但是引入了分区功能以后,该引擎已经被放弃了。

Federated

提供连接分离数据库到一个逻辑数据库的能力。该引擎用于连接其他数据库,然后传递查询到其他服务器。适用分布式环境。默认是禁用的,因为存在一些问题。

Example

这个并不是一个可用的引擎,这个引擎是为开发人员存在的。用于说明如何开发一个新的存储引擎。

InnoDB vs MyISAM

MySIAM InnoDB
Transactions X O  
Row locking X O  
Relational base design X O  
Freq select O X  
Freq insert, update, delete X O  
Full-text search O 5.6.4  

其他的存储引擎

MySQL :: MySQL 5.7 Reference Manual :: 15 Alternative Storage Engines

WIP

参考文献

Alternative Storage Engine