Mysql—存储引擎

19 篇文章 0 订阅

Innodb存储引擎

 

支持事务,所以崩溃后可以通过事务日志恢复数据。

 

数据存储在Innodb黑盒的表空间tablespace

数据和索引存放在单独的文件中

 

实现了标准的四个隔离级别

默认RR,通过MVCC+间隙锁防止幻读

 

间隙锁

MVCC会锁定涉及到的数据行

间隙锁会对索引中,间隙进行锁定,防止幻影行的插入

 

回表

Innodb主键为聚集索引,聚集索引的节点上存放了整行数据。

其他索引为非聚集索引,非聚集索引叶子结点只存放聚集索引。

回表即:当通过非聚集索引查询数据时,Innodb先通过飞聚集索引找到聚集索引值。再查询聚集索引找到行数据。

 

 

Innodb索引

主键为聚集索引,再其他二级索引中会存放聚集索引。如果主键过大,会使索引数据膨胀过快;如果索引比较多,那么应该让主键尽可能小。

 

MyISAM存储引擎

 

  1. 优点:结构简单,查询速度快、支持全文索引、表压缩、空间函数等。支持并发插入,concurrent insert。我理解即写锁的插队。
  2. BLOB和TEXT字段也支持500字符的索引。
  3. 缺点:不支持行锁和事务。崩溃后数据无法恢复。
  4. 压缩表,适用于数据导入后不会再修改的表。好处是减少磁盘空间占用,也就减少了磁盘IO,提升查询性能。myisampack进行压缩,压缩表数据及索引不支持修改。压缩表压缩记录为独立压缩。所以读取单行时不需要解压整个表。

 

MyISAM支持表修复,但并不是数据恢复,而是检查表中错误,可能存在数据丢失问题。如开启了DELAY_KEY_WRITE延迟更新索引键,每次修改操作后不会立刻将修改的索引数据写入磁盘,而是写入内存缓冲区。只有当清理in-memory key buffer或者关闭表时才会将索引数据写入磁盘。好处是极大的提升了性能;问题是当发生数据库崩溃时,会造成索引损坏。这时候要通过表修复工具进行修复。DELAY_KEY_WRITE可以单表开启或者全局开启。

 

 

Archive存储引擎

 

  1. 非事务引擎
  2. 只支持insert和select,执行update/delete时会报错don‘t have this option
  3. 支持行锁和缓冲区,可实现高并发插入
  4. 批量插入在完成之前对查询不可见
  5. 缓存所有写数据,增加查询速度
  6. 利用zlib对插入的行进行压缩,压缩比约为1:10,所以磁盘IO数据量更少。插入性能更高与Innodb和MyISAM。
  7. 支持非聚集索引!但只支持自增索引!所以数据智能递增,如果最大数据为10;想添加一个id为9的数据会报错重复的key。猜测是自己填充了。
  8. 最佳实践表主键自增,并且使用Mysql的自增auto_increment
  9. 最佳场景为数据不会更改的需求如:请求分析的请求记录

 

 

Memory存储引擎

  1. schama定义在磁盘,但数据只存在内存中
  2. 内存操作,速度更快!
  3. 适用于数据不怕丢的场景
  4. 支持hash和b+tree索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值