MySql的数据结构
MySQL的数据结构和存储引擎有直接关系,InnoDB、MyISAM存储引擎底层使用的B+树
不同的存储引擎数据的组织形式不一样
存储引擎是表级别的,也就是说每张表可以设置不同的存储引擎
MyISAM
当一张表设置了MyISAM存储引擎,在磁盘中会对应出现表结构.frm
、表索引.MYI
、表数据.MYD
三个文件
MyISAN存储引擎走索引查询流程
MyISAM存储引擎是非聚集索引,不支持事务
InnoDB
InnoDB是兼顾高可靠和高性能的通用存储引擎,在MySQL5.5后,InnoDB是默认的MySQL存储引擎,支持行锁,支持事务
当一张表设置了InnoDB存储引擎,在磁盘中会对应出现文件.ibd
,MySQL8之前还会出现.frm
文件
使用InnoDB的表强烈建议建一个整型的自增主键,这样该表就能自动形成一个B+树的索引结构,并由主键字段来组织数据。如果一个表没有主键,MySQL会自动从表中选一个没有数据重复的字段来组织数据,如果没有找到会新增一个隐藏字段列来维护,这个过程是耗费资源的
MyISAM和InnoDB的区别
主要是三个区别
InnoDB逻辑存储结构
InnoDB内存架构
InnoDB磁盘结构
InnoDB架构中的后台线程
InnoDB事务原理
事务是一组操作的集合,是一个不可分割的单位,这些操作要么同时成功,要么同时失败
事务的特性:
- 原子性(Atomicity):事务是不可分割的最小操作单位,要么全部成功,要么全部失败
- 一致性(Consistency):在事务开始之前和结束之后,数据库的状态应该保持一致
- 隔离性(Isolation):确保同时运行的多个事务之间互相隔离,每个事务看起来就像是在独立地使用数据库的所有资源一样
- 持久性(Durability):当事务成功完成后,对数据库所做的更改应该永久保存下来
InnoDB事务原理MVCC
RC隔离级别下的readview方式
RR隔离级别下的readview方式
总结MVCC实现原理