暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

高性能MYSQL读书笔记——引擎与MVCC

歪歪梯Club 2020-12-06
290

MVCC

多版本并发控制是mysql的innodb采用的并发控制方案,在可重复读下默认使用该并发控制方案
原理:

  • MySQL全局维护一个递增版本号

  • 表结构有两个隐藏的列,分别代表 初始化时版本 和 过期时版本

  • 新增一条记录时——物理写入一条新数据,设置初始化版本为当前Mysql版本号,过期时版本为空

  • 更新一条记录时——将旧的物理数据行的过期时版本设置为当前Mysql版本号,不改动旧物理数据,重新物理写入一条新纪录,初始化版本填写当前Mysql版本号,新物理数据使用更新后的数据

  • 删除一条记录——将数据库保存的该主键对应的最新一条物理数据(过期时版本为空)的记录的过期时版本设置为当前Mysql版本号

  • 查询数据——找到 【过期时版本为空】 或者 【初始化版本<=当前mysql全局版本 并且 过期时版本>= 当前mysql全局版本】 的数据

总结:通过多条记录,多版本,只做增量的方式来保证可重复读和并发控制(版本校验)

myisam引擎

  • 索引和数据分开在两个文件,因此支持行锁性能不好保障,所以没有设计支持行锁和事务

  • 崩溃后数据恢复困难

  • myisam的存储是紧密存储,结构简单,适用于只读数据库(一经导入不再修改),可以提供更好的性能

  • 对其进行压缩后得到压缩表,一般用于只读数据

Innodb

  • b+树存储索引和数据,叶节点就是数据

  • 支持行锁和事务

  • 因为结构原因,每个非主键索引的物理结构实际都包含主键数据,该引擎下,如果表主键结构数据较大,应该减少非主键索引数量

archive引擎

  • 专门用于频繁插入类型的数据库引擎,适合log类,低查询,只插入

  • 只支持插入和查询,对插入操作缓存到内存,并且对插入行进行压缩

  • 查询需要全表查询

csv引擎

  • 一般用于转化excel文件数据到数据库,方便数据操作

  • 可以将逗号分割的文本文件作为表处理

memory引擎

  • 数据直接存到内存,重启数据清空,仅保留表结构

  • mysql执行查询过程中需要暂存中间结果的表就是memory表

NDB引擎

  • 负责mysql分布式与集群系统的实现

更多资料,请搜索公众号歪歪梯Club
文章转载自歪歪梯Club,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论