innoDB 索引结构详解

1、数据库索引

innoDB和MyISAM对比
区别innoDBMyISAM
事物支持支持不支持
锁粒度行锁表锁
并发性高并发低并发
构成结构和缓存机制数据和索引文件都存在在.Idb文件里,并且都缓存在内存里。

数据文件都扩展名.MYD(MYData)

索引文件都扩展名.MYI(MYIndex)

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

select count(*)

需要扫描全表,统计所有数据只需要从计数器中读取保存好都行数

 

 

 

 

 

 

 

 

 注意:MyISAM在mysql 8.0版本将 废弃该索引

2、InnoDB

2-1、InnoDB的体系结构有:内存结构,线程,磁盘文件三部分组成。

2-2、InnoDB的存储结构,逻辑存储单元主要分为:表空间、段、区和页。

 1、表空间:InnoDB所有数据都是存储在表空间,表空间又分为系统表空间,用ibdata1来命名,它会存储所有数据信息和回滚字段(uudo)信息,mysql 5.6之后undo表空间可以通过参数设置独立出去,InnoDB_data_flie_path负责定义系统表空间的路径、初始化大小和自动扩展策略。数据库默认自动扩展大小为64M。

  2、段:表空间是有段组成的,可以把一个表理解成一个段。通常又数据段、回滚段和索引段等。每个段又N个区和32个零散页组成,段的空间扩展是以区为单位进行扩展的。创建一个索引就会创建两个段,分别为非叶子节点段和叶子节点段。

 3、区:区是有连续段页组成段,是物理上连续分配段空间,每个区大小固定为1MB。

4、页:InnoDB最小段物理存储单位,一个区有连续段64个页组成,页默认大小16KB。在mysql 5.6可以调小,mysql 5.7可以调大。

注意:一个页会有1/16空间用于更新数据,真正使用空间只有15/16。一个页最少可以存储两行数据,虚拟最小行和虚拟最大行,用来限定行段最大范围,以此来保证B+tree的索引的双链表结构。

5、行:页里面又记录着行记录的信息,InnoDB存储引擎是面向行的,也就是数据是按照行来存储的。InnoDB有两种文件存储格式,分别是:Antelope和Barracuda,Antelope文件格式有两种:compact和redundant两种行记录格式;Barracuda的文件格式也有两种:compressed和dynamic两种行记录格式。mysql  5.7后默认dynamic行记录格式的Barracuda文件。

 3、InnoDB的三大特性

    1、插入缓冲、两次写和自适应哈希索引构造InnoDB的三大特性。

   2、插入缓冲:把普通索引上的DML操作从随机I/O变成顺序I/O,提高I/O效率。工作原理:先判断普通索引是否在缓冲池中,如果在就直接插入,如果不在就先放到 change buffer 中,然后进行change buffer 和普通索引的合并操作,可以将多个插入合并到一个操作中,一下子就提高了普通索引的插入性能。 

 

3、两次写(dobule  write):插入缓冲保证性能,两次写则是保证写入的安全性,防止mysql 发生故障时,InnoDB发生部分写的问题。

4、自适应哈希索引:InnoDB存储引擎有一个机制,可以监控索引的搜索,如果注意到InnoDB可以通过查询可以通过建立哈希索引得到优化,就会自动完成这件事。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值