美文网首页
MySQL存储引擎

MySQL存储引擎

作者: xuanxiao | 来源:发表于2020-03-24 11:25 被阅读0次

MyISAM

1、不支持事务
2、属于表级锁,当查询时,会给表加一个共享锁,当数据更改时,会给表加一个排它锁,也就是说,读操作会阻塞写操作,写操作会阻塞读操作,不适合高并发的读写业务场景。
3、以堆表方式存储,存储在表中的数据没有顺序。存储时,叶子节点直接指向数据的物理地址,而不是索引的位置,避免了索引的二次查找,因此,查询性能比InnoDB好。
4、支持Btree
5、数据存储时分开存储的,数据存储在.MYD中,索引存储在.MYI中
6、可压缩,可修复
7、适用于读请求远远大于写请求

CSV

1、不支持事务
2、数据以CSV格式存储
3、所有列不能为null
4、不支持索引
5、当打开general.log时,日志存储时以此引擎存储

ARCHIVE

1、不支持事务
2、数据表使用zlib压缩
3、只支出Insert和Select
4、只允许在自增ID上建立索引

MEMORY

1、不支持事务
2、数据保存在内存中
3、所有的字段长度固定
4、支持Btree和Hash索引
5、适用于缓存字典映射表这种类型的数据

InnoDB

1、支持事务,具有原子性、一致性、隔离性、持久性的特点
2、按照主键的顺序存储,每一个非主键索引的叶子节点指向的是数据行中的主键,因此,数据表中尽量要有主键
3、支持行级锁
4、支持Btree和自适应Hash索引
5、支持空间和全文索引
6、不适合直接在线修改表结构

InnoDB在线修改表结构

使用pt-online-schema-change工具
原理:先创建一个一模一样的表,不过是改动后的结构的表,然后分批次将原来表的数据导入新表,导出完成后,再将旧表删除,更改新表为旧表的名称

InnoDB如何实现事务的

1、原子性(A)
使用回滚日志undo.log实现,此日志记录数据修改前的状态
2、一致性(C)
使用重做日志redo.log实现,此日志记录数据修改后的状态
3、隔离性(I)
使用锁来实现资源隔离,其中锁分为共享锁和排它锁
4、持久性(D)
使用undo.log和redo.log来实现

InnoDB写是否阻塞读

不会
常规来说,写会加排它锁,因此无法读取
当给表A的id为1这一行加排它锁时,其他需求读取id=1的数据,是无法直接查询的,但是数据库会通过一些条件,去undo.log中获取id=1的数据进行返回,因此,写的时候还是可以读取的

相关文章

网友评论

      本文标题:MySQL存储引擎

      本文链接:https://www.haomeiwen.com/subject/vmybyhtx.html