MVCC与MySQL各大引擎介绍 - Go语言中文社区

MVCC与MySQL各大引擎介绍


MVCC

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

  • MySQL全局维护一个递增版本号
  • 表结构有两个隐藏的列,分别代表 初始化时版本 和 过期时版本
  • 新增一条记录时——物理写入一条新数据,设置初始化版本为当前Mysql版本号,过期时版本为空
  • 更新一条记录时——将旧的物理数据行的过期时版本设置为当前Mysql版本号,不改动旧物理数据,重新物理写入一条新纪录,初始化版本填写当前Mysql版本号,新物理数据使用更新后的数据
  • 删除一条记录——将数据库保存的该主键对应的最新一条物理数据(过期时版本为空)的记录的过期时版本设置为当前Mysql版本号
  • 查询数据——找到 【过期时版本为空】 或者 【初始化版本<=当前mysql全局版本 并且 过期时版本>= 当前mysql全局版本】 的数据

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

myisam引擎

索引和数据分开在两个文件,因此支持行锁性能不好保障,所以没有设计支持行锁和事务
崩溃后数据恢复困难
但是myisam的存储是紧密存储,结构简单,适用于只读数据库(一经导入不再修改),可以提高更好的性能
对其进行压缩后得到压缩表,一般用于只读数据

Innodb

b+树存储索引和数据,叶节点就是数据
支持行锁和事务
但是因为结构原因,每个非主键索引的物理结构实际都包含主键数据
所以该引擎下,如果表主键结构数据较大,应该减少非主键索引数量

archive引擎

专门用于频繁插入类型的数据库引擎
只支持插入和查询,对插入操作缓存到内存,并且对插入行进行压缩
查询需要全表查询,适合log类,低查询,只插入

csv引擎

一般用于转化excel文件数据到数据库,方便数据操作
可以将逗号分割的文本文件作为mysql表处理

memory引擎

数据直接存到内存,重启数据清空,仅保留表结构
mysql执行查询过程中需要暂存中间结果的表就是memory表

NDB引擎

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

更多文章,请搜索公众号歪歪梯Club
更多资料,请搜索公众号歪歪梯Club

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_44627989/article/details/110750043
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢