MySQL存储引擎

概述

MySQL支持多种存储引擎,可以通过SHOW ENGINES命令查看MySQL所支持的所有存储引擎。

MySQL 当前默认的存储引擎是 InnoDB。并且,所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务

MySQL 5.5.5 之前MyISAM 是 MySQL 的默认存储引擎。5.5.5 版本之后,InnoDB 是 MySQL 的默认存储引擎。


MySQL存储引擎架构

MySQL存储引擎采用的是插件式架构,支持多种存储引擎。存储引擎是基于表的,不是基于数据库的


MyISAM和InnoDB有什么区别

MySQL 5.5之前,MyISAM引擎是默认存储引擎,但是MyISAM不支持事务和行级锁,且崩溃后无法安全恢复

InnoDB MyISAM
行级 支持 只有表级锁,在并发写的情况下,性能极差
事务 支持(默认使用可重读隔离级别,可以解决幻读问题的发生) 不支持
外键 支持(外键对于维护数据一致性非常有帮助,但是对性能有一定的损耗,因此通常情况下,不建议在实际生产项目中使用外键,而在业务代码中进行约束 不支持
安全恢复 支持(数据库在异常崩溃后,**重启时会保证数据库恢复到崩溃前的状态,这个过程依赖于redo log**) 不支持
索引实现 使用B+树作为索引结构,数据文件本身就是索引文件 使用B+树,索引文件和数据文件分离。
性能 随着CPU核数的增加,InnoDB的读写能力呈线性增长。 读写不能并发,所以处理能力和CPU核数无关。

InnoDB存储引擎对MVCC的实现

MVCC, Multi-Version Concurrency Control 多版本并发控制。MVCC是一种用于多个并发事务同时读写数据库时,保持数据的一致性和隔离性的机制。它通过在每个数据行上维护多个版本的数据来实现。当一个事务要对数据库中的数据进行修改时,MVCC会为该事务创建一个数据快照,而不是直接修改实际的数据行