MVCC
多版本并发控制是mysql的innodb采用的并发控制方案,在可重复读下默认使用该并发控制方案
原理:
MySQL全局维护一个递增版本号
表结构有两个隐藏的列,分别代表 初始化时版本 和 过期时版本
新增一条记录时——物理写入一条新数据,设置初始化版本为当前Mysql版本号,过期时版本为空
更新一条记录时——将旧的物理数据行的过期时版本设置为当前Mysql版本号,不改动旧物理数据,重新物理写入一条新纪录,初始化版本填写当前Mysql版本号,新物理数据使用更新后的数据
删除一条记录——将数据库保存的该主键对应的最新一条物理数据(过期时版本为空)的记录的过期时版本设置为当前Mysql版本号
查询数据——找到 【过期时版本为空】 或者 【初始化版本<=当前mysql全局版本 并且 过期时版本>= 当前mysql全局版本】 的数据
总结:通过多条记录,多版本,只做增量的方式来保证可重复读和并发控制(版本校验)
myisam引擎
索引和数据分开在两个文件,因此支持行锁性能不好保障,所以没有设计支持行锁和事务
崩溃后数据恢复困难
myisam的存储是紧密存储,结构简单,适用于只读数据库(一经导入不再修改),可以提供更好的性能
对其进行压缩后得到压缩表,一般用于只读数据
Innodb
b+树存储索引和数据,叶节点就是数据
支持行锁和事务
因为结构原因,每个非主键索引的物理结构实际都包含主键数据,该引擎下,如果表主键结构数据较大,应该减少非主键索引数量
archive引擎
专门用于频繁插入类型的数据库引擎,适合log类,低查询,只插入
只支持插入和查询,对插入操作缓存到内存,并且对插入行进行压缩
查询需要全表查询
csv引擎
一般用于转化excel文件数据到数据库,方便数据操作
可以将逗号分割的文本文件作为表处理
memory引擎
数据直接存到内存,重启数据清空,仅保留表结构
mysql执行查询过程中需要暂存中间结果的表就是memory表
NDB引擎
负责mysql分布式与集群系统的实现





