MySQL 存储引擎
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适用于高可用集群。