MySQL 存储引擎

60

MySQL支持多种存储引擎,每种引擎都有其特定的使用场景和优缺点。以下是常见的存储引擎及其主要区。

InnoDB

事务支持:支持ACID事务(提交、回滚、崩溃恢复)。

锁机制:行级锁,提高并发性能。

外键:支持外键约束。

存储结构:数据与索引存储在表空间(.ibd文件),支持独立表空间或共享表空间。

索引类型:聚簇索引(主键索引直接关联数据),二级索引保存主键值。

适用场景:高并发读写、需要事务(如支付系统)、外键约束。

其他:支持MVCC(多版本并发控制)、在线热备份、崩溃恢复能力强。

MyISAM

事务支持:不支持事务。

锁机制:表级锁,并发写性能较差。

外键:不支持外键。

存储结构:每个表存储为3个文件(.frm结构、.MYD数据、.MYI索引)。

索引类型:非聚簇索引(索引与数据分离,叶子节点存数据地址)。

适用场景:读多写少(如日志系统)、全文索引(MySQL 5.6前唯一支持)。

缺点:崩溃后恢复困难,表易损坏。

Memory(HEAP)

数据存储:数据存于内存,重启后丢失。

锁机制:表级锁。

索引类型:支持哈希索引(默认)和B树索引。

适用场景:临时表、高速缓存。

限制:不支持TEXT/BLOB类型,表大小受内存限制。

Archive

存储方式:高压缩存储(适合归档数据)。

写入性能:仅支持INSERT和SELECT,不支持UPDATE/DELETE。

适用场景:日志归档、历史数据存储。

CSV

存储方式:数据以CSV格式存储,可直接用文本编辑器查看。

功能限制:不支持索引,所有列必须非NULL。

适用场景:数据导入/导出、与外部系统交互。

NDB Cluster

分布式存储:数据分片存储在集群节点中。

高可用性:支持自动故障转移和冗余。

适用场景:高可用性、实时性要求高的应用(如电信系统)。

核心区别对比

如何选择存储引擎?

默认选择:InnoDB(MySQL 5.5+默认),适合大多数事务型应用。

读密集型:若无需事务且以SELECT为主,可考虑MyISAM(但已逐渐被InnoDB取代)。

临时数据:Memory引擎适合缓存或会话数据。

高压缩归档:Archive引擎节省存储空间。

分布式场景:NDB Cluster适用于高可用集群。