数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建建,查询,更新和删除数据操作。 不同的存储引擎提供不同的存储机制索引技巧,锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。
MySQL 的重要核心就是存储引擎,包括处理事物安全表的引擎和处理费事务安全表的引擎。可以针对不同的需求,对每一个表采用不同的存储引擎,用以提高数据库性能。
以MySQL5.7为样例,支持的引擎有:InnoDB,MyISAM,Memory,Merge,Archive,Federated,CSV,BLACKHOLE等。可使用以下语句查看支持的引擎:
show engines;
InnoDB
InnoDB是事务型数据库的首选,支持事务安全表(ACID),支持行锁定和外键。是MySQL5.7的默认存储引擎。
主要特性:
- 具有提交、回滚和崩溃恢复能力的事务安全。
- 高性能。为处理巨大数据量的最大性能而设计,CPU效率比其他基于磁盘的关系数据库引擎要高。
- 表和索引存在在同一个逻辑表空间,和MySQL服务器整合。
- 支持外健完整性约束。
MyISAM
MyISAM基于ISAM的存储引擎,并对其扩展,是在Web、数据存储和其他应用环境下最常使用的数据引擎之一。具有较高的插入、查询速度,但不支持事务。
主要特性
- 大文件。
- 当把删除、更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。
- 表最大索引数是64,可以通过重新编译来改变。每个索引最大的列数是16个。
- 最大键长度是1000B,可以通过重新编译来改变。
- BLOB 和 TEXT列可以被索引。
- NULL 值被允许在索引列中。
- 可以把数据文件和索引文件放在不同目录。
- 每个字符可以有不同的字符集。
- 有VARVHAR 的表可以固定活动态记录长度。
- VARCHAR 和 CHAR 列可以多达64KB。
MEMORY
MEMORY 存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。
主要特性
- 每个表可以有多达32个索引,每个索引16列,以及500B的最大键长度。
- 执行hash 和 btree 索引。
- 使用固定的记录长度的歌声。
- 不支持 BLOB 和 TEXT列。
- 支持AUTO_INCREMENT 列和对可包含 NULL 值的列的索引。
- 表在所有客户端之间共享。
- 表内容存在内存中。
- 释放内存,执行DELETE FROM 或 TRUNCATE TABLE。
存储引擎的选择
功能 | MyISAM | Memory | InnoDB | Archive |
---|---|---|---|---|
存储限制 | 256TB | RAM | 64TB | None |
支持事物 | No | No | Yes | Yes |
支持全文索引 | Yes | No | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键 | No | No | Yes | No |
如果要提供提交、回滚和崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,应选择InnoDB。如果数据表主要用来插入和查询记录,则MyLSAM引擎能提供较高的处理效率。如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive存储引擎适合存储归档数据,例如记录日志信息。
一个数据库中多个表可以采用不同的数据引擎,以来满足各种性能和需求。使用恰当,将会提高整个数据库的性能。