存储引擎是数据库的底层软件组件,使用存储引擎对数据库中的数据进行操作。不同的存储引擎,提供了不同的特性及功能。可以基于不同的使用场景,选择合适的存储引擎。

MySQL存储引擎

MySQL提供了多种不同的存储引擎供我们使用,并且不同的表可以使用不同的存储引擎。

常见的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、CSV等。

可以使用show engines子句查看数据库支持的存储引擎:

connect-database-workbench-2

从上图可以看出,只有InnoDB存储引擎支持事务特性。

Engine:存储引擎名称;

Support:当前数据库是否支持该存储引擎;Yes:支持且可使用;No:不支持;Default:数据库当前默认存储引擎;Disabled:支持,但已被禁用;

Comment:存储引擎详细说明;

Transactions:是否支持事务;

XA:是否支持XA事务;

Savepoints:是否支持保存点;

InnoDB存储引擎

  • MySQL5.5.5之后的默认存储引擎;
  • 支持事务特性;
  • 支持行锁及select操作的非锁定读;
  • 支持外键;

MyISAM存储引擎

  • 基于ISAM存储引擎扩展;
  • 具有较好的插入及查询性能;
  • 每个表的最大索引数是64;每个索引最大的列数是16;
  • 可以索引BLOB、TEXT字段;
  • 每个MyISAM表,都有一个内部auto_increment列;
  • 可以把数据文件和索引文件放在不同的目录;
  • 每个字段可以设置不同的字符集;
  • varchar和char字段可以存储64KB的数据;

Memory存储引擎

  • 数据存储在内存中,为查询提供快速访问性能。
  • 每个表的最大索引数是32;每个索引最大的列数是16;
  • 不支持BLOB 、TEXT字段;
  • 当数据不再需要时,可以使用DELETE或TRUNCATEd清空整个表;

Archive存储引擎

  • 主要用于数据归档;
  • 只支持insert、replace和select;
  • 支持行级锁和专用的缓存区,可实现高并发;
  • 只允许在自增ID列上加索引;
  • 支持分区,不支持事务处理;
  • 插入快、查询快、占用空间小;
  • 使用zlib无损数据压缩算法,压缩率非常好;因此,磁盘I/O更少,数据移植效率高;
  • 数据存储在.ARZ为后缀的文件中;

存储引擎的选择

不同存储引擎都有各自的特点,以适应不同的使用需求。使用合适的存储引擎,可以提高整个数据库的性能表现。

功 能InnoDBMYISAMMemoryArchive
存储限制64TB256TB受限于RAM大小None
支持事务YesNoNoNo
支持全文索引NoYesNoNo
支持数索引YesYesYesNo
支持哈希索引NoNoYesNo
支持数据缓存YesNoN/ANo
支持外键YesNoNoNo

存储引擎选择Tips:

  • 如果需要事务能力,并要求实现并发控制,选择InnoDB;
  • 如果仅仅用来插入和查询数据,MyISAM能提供较好的性能;
  • 如果只是临时存放数据且数据量不大,也不需要较高的数据安全性,可以选用Memory;
  • 如果只有插入和查询操作,可以选用Archive。Archive支持高并发插入,非常适合存储日志及归档数据;
picture loss