MySql引擎InnoDB的四大特性 您所在的位置:网站首页 innodb引擎四大特性 MySql引擎InnoDB的四大特性

MySql引擎InnoDB的四大特性

2023-12-14 13:26| 来源: 网络整理| 查看: 265

插入缓冲

mysql中常用的存储引擎主要是Mylsam和InnoDB,这二者的区别主要是:

MylsamInnoDB存储结构每张表被存放在三个文件:表的结构,数据文件和索引文件每张表存储在一个文件,innodb的最小存储单元为页(一般大小为16K)存储空间数据能被压缩,需要的存储空间较小需要的内存和磁盘空间较大,因为需要在主内存中建立buffer pool(预读数据,包括常用的数据和索引)是否支持聚簇索引不支持支持是否支持哈希不支持支持是否支持全文索引支持不支持是否支持外键不支持支持文件格式数据和索引是分开存储的数据和索引是存储在一起的记录存储顺序按照插入的数据顺序按照主键顺序事务不支持支持锁表锁行锁select更优update,insert,delete更优select count(*)更优(其内部维护了一个计数器,可以直接调取)

插入缓冲是对应非聚集索引的,由于在聚集索引中插入一个数据一般是按照主键顺序递增的(innodb中是通过主键聚集数据,如果没有设置主键就会用第一个唯一索引代替,如果也没有唯一索引就会生成一个6字节的rowid作为聚集索引),而对于非聚集索引插入一个数据不一定是按照原来顺序递增的这个时候就需要离散的访问非聚集索引页,这个过程会造成性能丢失,由此innodb会创建一个 insert buffer,数据先插入到insert buffer中如果非聚集索引页在这个buffer中,那么就直接插入,否则就插入但是会通知索引页数据已达到,待多次插入操作以后一次性执行到非聚集索引表页的操作。

2 二次写

二次写主要是针对脏读页。mysql中数据最小是16k的,而磁盘io最小单元是512字节。当进行改变2k的数据时候前1k数据正常写入到单元中,而与此同时服务器发生宕机磁盘损坏,即使通过redu log也无法修复受损磁盘,而二次写就能解决这个问题。当触发脏读页时候,系统先将脏读页数据拷贝到doubliewrite buffer中而不是直接写入数据库,然后 再将二次写缓冲区数据分两次写入到磁盘共享空间(每次50%),待到数据固化将脏读页数据写入到对应的实际表文件,最后进行脏读位置数据(标记)可覆盖。

3 自适应哈希索引

mysql中索引是用b+树存储的(innodb相对于mylsam二级索引叶子结点存储的不是指针而是主键,这样做得好处是移动时候无需更新这个二级索引叶子结点),一般树高小于等于3,innodb中对于那些经常使用的二级索引会自动建立哈希索引,好处就是没有树高,查询更快降低对二级索引的访问频率。

4 预读

innodb中存在一个buffer pool这个这个buffer存储着最近可能被访问到的数据,对于这个buffer的管理一般有两种方式,一种是线性策略,存储已有数据页的相邻页,第二种是随机策略(淘汰一般是LRU)。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有