面试题学习笔记 | MySQL 存储引擎
在 MySQL 中,存储引擎是数据库用来存储数据的底层实现方式。常见的存储引擎有 InnoDB、MyISAM 和 Memory,它们的主要区别体现在性能、数据持久化和锁机制等方面
InnoDB(MySQL 5.5 之后的默认存储引擎)
特点:
支持事务:实现了 4 种标准的隔离级别,并通过 MVCC 多版本并发控制来支持高并发,默认隔离级别为可重复读
支持行级锁:相比表级锁,行级锁减少了锁的粒度,提高了并发性能,并可以通过行锁和间隙锁来解决幻读问题
支持外键:可以在表与表之间建立约束(但实际开发中通常不使用)
支持崩溃后的安全恢复:通过 redolog 来实现
主键索引使用聚簇索引,叶子节点存储完整的数据。非主键索引仅存储索引值和主键,因此如果使用非主键索引时,若索引无法覆盖,需通过找到的主键再到聚簇索引中查找数据
MyISAM(MySQL 5.5 之前的默认存储引擎)
特点:
不支持事务:因此只适用于对事务一致性要求不高的场景
表级锁:相比行级锁,表级锁的并发性能较低,写入时会对整张表加锁。但启用并发插入配置后,如果数据插入到表尾,读操作将不会被阻塞
索引为 B+ 树结构,但数据和索引是独立存储的,和 InnoDB 不同,InnoDB 在叶子节点存储完整的数据。因此主键和非主键索引差异较小
不支持崩溃后的安全恢复
InnoDB 和 MyISAM 适用场景
InnoDB 适用于需要高并发、事务处理和数据完整性保证的场景,如电商、金融等;而 MyISAM 更适合读多写少且对内容完整度要求不高的场景,如博客管理系统等。通常情况下,使用默认的 InnoDB 即可
Memory
特点:
数据存储在内存中,速度较快,但存在持久化问题,即服务器重启时数据会丢失
适用于缓存场景。
总结
MySQL 提供了多种存储引擎,以满足不同应用场景的需求。InnoDB 是默认的存储引擎,适用于对事务一致性和高并发要求较高的场景,提供了事务支持、行级锁和崩溃恢复等功能;MyISAM 更适合读多写少、对事务一致性要求不高的场景,缺少事务支持,但性能在某些特定场景下更优;Memory 存储引擎则将数据存储在内存中,适用于缓存和高速数据处理,但面临持久化问题。选择合适的存储引擎,能够根据应用的需求优化性能、保障数据的安全性和一致性