美文网首页
MySql 各个存储引擎介绍

MySql 各个存储引擎介绍

作者: 3fc28cd0576c | 来源:发表于2020-10-27 10:53 被阅读0次

InnoDB

1.支持行锁

2.支持外键

3.支持非锁定读

4.支持事物

5.MVCC支持高并发

聚族,所有数据都是按id顺序存放,因此按主键获取数据特别快,索引只存放id

缓冲池:可以设置多个缓冲池,每个页根据不同的哈希值分配到不同的缓冲池中,从而减少资源竞争,根据innodb_buffer_pool_instances参数设置,缓冲池是为了协调CPU与磁盘速度的鸿沟,页的操作首先都是在缓冲池中完成的。

1)LRU List,Free List,Flush List

缓冲池中的页默认大小为16KB,采用LRU算法来管理,最新访问的页,并不是插入到列表首部,而是根据配置值midpoint的位置来插入,默认是5/8位置,如果不采用这种方式,常见的索引扫描和数据扫描,将这些数据全部插入头部,会将热点数据移除缓冲池。

2)压缩页,原本16KB大小的页可以被分为8KB,4KB,2KB,1KB的页,通过unzip_LRU列表进行管理。通过伙伴算法管理。

3)脏页,在LRU列表中的数据被更改后,称为脏页,脏页既存在于LRU列表中,也存在于Flush列表中,两个互不影响

4)重做(redo)日志缓冲,默认8MB

5)额外内存

6.CheckPoint

事物采用Write Ahead log策略,既当事物提交时,先写重做日志(redo),再写数据页,发生宕机时通过重做日志来恢复数据。

CheckPoint技术是为了解决:1)缩短数据库恢复时间,直接从checkPoint点之后的重做日志恢复数据,2)将脏页刷回磁盘。3)重做日志不可用时,刷新脏页。

关键特性

1.插入缓冲(Insert Buffer),2.两次写,3.自适应哈希索引,4.异步IO,5.刷新邻近页

1.Insert Buffer(针对辅助非唯一索引)

聚集索引,直接插入数据页,一般主键都是递增,是顺序插入,速度很快,但是辅助索引就可能是随机插入,因此先判断索引页是否在缓冲池中,若在,则直接插入索引页,若不在,写入插入缓冲。再按照一定的频率和时机对插入缓冲和索引页进行合并,这时很可能将多个插入操作合并到一个操作中(因为在同一个索引页中),大大提升了效率。

需要满足两个条件:1)索引是辅助索引,2)索引不是唯一的

写密集情况下,Insert Buffer占用内存过大,默认最大可占缓冲区的1/2,可以配置

2)1.1.x版本带来了change buffer(针对辅助非唯一索引),可以对insert,delete,update操作都进行缓冲,它们分别是:Insert Buffer,Delete Buffer,Purge Buffer

通过 innodb_change_buffer_max_size 来控制大小,最大为50,默认25,既占用缓冲池的1/4

采用B+树实现

三种合并情况:该Insert 所对应的索引页被读入到缓冲池中,2)Insert Buffer BitMap 追踪到该辅助索引已无可用空间,3)Master Thread

2.两次写(数据库的可靠性)

对缓冲池中的脏页进行刷新时,并不先写磁盘,而是先将脏页复制到doublewrite buffer中,然后再分两次,每次1MB将doublewrite buffer写入到共享表空间的磁盘上,顺序写入,开销不是很大,最后再写数据文件(此时是离散写入)。

3.自适应哈希索引(Adaptive Hash Index,AHI)

4.异步IO

5.刷新邻近页

MyISAM

1.不支持事物

2.表锁

3.缓存只缓存索引,不缓存数据文件

NDB

1.集群

MEMORY

1.数据都储存在内存中,崩溃不可恢复,速度快

2.默认使用Hash索引

3.大小受内存限制,只支持表锁,并发性能差

4.不支持TEXT和BLOB字段,变长(varchar)都会按照定长(char)来储存,浪费内存

5.查询时中间表会使用MEMORY来储存,如果不满足4中的条件,则会使用MyISAM来储存

Archive

只支持INSERT和SELECT操作,5.1开始支持索引,会使用zlib算法对数据进行压缩,占用空间小

相关文章

  • MySql 各个存储引擎介绍

    InnoDB 1.支持行锁 2.支持外键 3.支持非锁定读 4.支持事物 5.MVCC支持高并发 聚族,所有数据都...

  • MYSQL数据库面试题汇总

    1.mysql的各个引擎 a.Innodb引擎,mysql的默认存储引擎(Mysql5.5.5之前是MyISAM)...

  • MySql高级之常见的Join查询(一)

    MySql的存储引擎介绍 : 常用的MySql存储引擎只有两个:MyISAM以及InnoDB。 两个存储引擎的区别...

  • MySQL介绍

    mysql介绍 其他数据库介绍 mysql特点 mysql存储引擎类型及特点 关于mysql单表存储 mysql介...

  • MySQL-InnoDB拾遗

    之前写过一篇介绍MySQL中存储引擎的文章MySQL之存储引擎,在实际工作中,还是以InnoDB存储引擎为主,此文...

  • 走向DBA之存储引擎(1)

    一、存储引擎介绍: 二、功能了解: 三、存储引擎种类: 3.1Oracle的MySQL 3.2MySQL支持的其他...

  • 2018-03-19

    mysql MyISAM引擎和InnoDB的介绍 1、MyISAM MyISAM是MySQL的默认存储引擎,基于...

  • MySQL-存储引擎

    1. 存储引擎种类 1.1 介绍(Oracle MySQL) MySQL 5.5 之前,使用MyISAM引擎作为模...

  • 01MySQL体系结构与存储引擎

    内容介绍 本节会分享MySQL 体系结构与存储引擎,包括 MySQL 数据库的体系结构、MySQL 支持的存储引擎...

  • mysql 索引

    注释:此文章的索引介绍是基于InnoDB存储引擎来介绍的,没特别声明則Mysql默认式InnoDB存储引擎存储。 ...

网友评论

      本文标题:MySql 各个存储引擎介绍

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