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会为该事务创建一个数据快照,而不是直接修改实际的数据行。