【Mysql高级特性】 InnoDB 的B+索引

【Mysql高级特性】 InnoDB 的索引结构

  • 索引
    • B+树索引
      • 聚集索引
      • 辅助索引
      • 联合索引
      • 覆盖索引
      • Multi-Range Read 优化 (MRR)
      • Index Condition Pubshdown 优化 (ICP)


相关文章 地址
初探 InnoDB 体系架构 初探 InnoDB 体系架构
InnoDB Checkpoint与 Redo log InnoDB Checkpoint与 Redo log
InnoDB 的关键特性 InnoDB 的关键特性
InnoDB 最全的文件介绍 InnoDB 最全的文件介绍
InnoDB 的逻辑存储结构 InnoDB 的逻辑存储结构

索引

innoDB中支持的索引类型

  • B+树索引
  • 全文索引
  • hash索引

B+树索引

B+树是由B树和索引顺序访问演化而来。B+树是为磁盘或者直接存取辅助设备设计的一种平衡查找树。在B+树中,索引记录节点都是按键值的大小顺序存放在哦那个一侧的叶子节点上,由个叶子节点指针进行连接。B+相比于B树b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”,并且叶子节点存在双向指针可以更好的全文查找
【Mysql高级特性】 InnoDB 的B+索引_第1张图片
在数据库中,B+树的高度一般都在2——4层,也就是说查找某一键值的行记录最多只需要2到4次I/O。

聚集索引

聚集索引就是按照每张便的主键狗仔一颗B+树,同时叶子节点中存放的即为整张表的行记录数据,聚集索引决定了索引组织表中的数据也是索引的一部分。同时B+树数据结构一样,每个数据页都是通过一个双向链表来进行链接,因此每张表都只能有一个聚集索引

辅助索引

辅助索引,叶子节点不包含行记录的全部数据。叶子节点除了包含键值意外,每个叶子节点中的所银行中害包含了一个书签。这个书签就是相应数据行的聚集索引键
辅助索引的存在并不影响数据在聚集索引中的组织,一次每张表可以有多个辅助索引。当通过辅助索引来查找数据是,InnoDB引擎会便利辅助索引并沟通过叶级别的指针获得只想主键索引的主键,然后再通过主键主键索引来找到一个完整的行记录,这个操作就叫回表


联合索引

联合索引是指对表上的多列进行索引。本质上说联合索引也是一颗B+树,只不过是按照多列的优先级进行排序
【Mysql高级特性】 InnoDB 的B+索引_第2张图片
联合索引的好处是已经对第二个键值进行了排序处理。

覆盖索引

覆盖索引,即从辅助索引中就可以得到查询的记录,从而不需要回表查询聚集索引中的记录。使用覆盖索引的好吃是辅助索引不包含整行的所有信息,故其大小要远小于聚集索引,因此可以减少大量的io

Multi-Range Read 优化 (MRR)

mysql 5.6 版本支持 Multi-Range Read 优化
简单来说,就是将随机访问转化为顺序的数据访问,MRR优化可用于 rang、ref、eq_ref类型
MRR优化的好处

  • 是数据访问变得较为顺序。在查找辅助索引时,首先根据得到的查询结果,按照主键进行排序,并按照主键排序进行回表查找
  • 减少缓冲池中页被替换的次数
  • 批量处理对键值的查询操作

Index Condition Pubshdown 优化 (ICP)

当进行索引查询时,首先根据索引来查询记录,让后再根据Where条件过滤记录,在支持ICP后,Mysql数据库会在取出索引的同时,判断是否可以使用WHERE条件过滤,也就是将WHERE的部分过滤操作放在了存储引擎层,在某些查询下可以大大减少上层SQL层对记录的索取,从而提高数据的整体性能。

你可能感兴趣的:(InnoDB体系架构,mysql,数据库,b树)