美文网首页MySQL锁mysql锁与索引专题
(三)索引与数据记录之间的关系

(三)索引与数据记录之间的关系

作者: b12af9baadf4 | 来源:发表于2016-12-29 10:28 被阅读422次

熟悉了b+tree索引的一个基本的创建过程,接下来我们来了解下b+tree索引与具体记录之间的关系。

拿之前的图为例,如下:

很多人会问,通过这种数据结构,我们如何找到需要的数据呢?

其实之前我们提到过,数据结构即索引会通过某种方式与数据表中的数据记录产生联系(指向)。

那这种联系(指向)是在哪里体现的呢?

在Mysql系统中,不同的存储引擎下b+tree索引与数据之间关系的表现方式是不同的。

在myisam存储引擎中,叶节点(即最底部节点)的data域会存放的是数据记录的地址,注意,只有叶节点存放数据地址,其他的节点不存储数据地址,只存储关键字key和对子节点的引用,如下所示:

在myisam索引下,上图中,我们对字段col2添加了索引,当查询条件字段col2为5的这个数据的时候,会从上之下依次查找,找到最下面节点中关键词为5 的节点,然后找到其对应数据记录的地址0x6A,然后根据0x6A这个地址迅速找到存放的那条数据记录20,5,Jim。

与myisam不同的是,在innodb存储引擎中,当索引的关键字key是主键的时候,叶节点(即最底部节点)的data域会存放的是完整的数据记录,只有叶节点存放数据记录,其他的节点不存储数据记录,只存储关键字和对子节点的引用,如下所示:

也就是说,在innodb存储引擎下,只有当我们对字段加主键索引的时候,这个索引的叶节点才会存储对应的数据记录,因此我们在数据结构上查询到对应的key就能找到数据了,这种索引就因为叶节点存放数据记录,所以被mysql官方称呼为聚簇索引。

需要注意的是,在innodb存储引擎下,当我们对字段A加普通索引的时候,这个索引的叶节点不会存储对应的数据记录,而是会存储对应的主键字段B的值,根据B的值再去主键B的数据结构下查找数据记录,从而得到数据记录。

相关文章

  • (三)索引与数据记录之间的关系

    熟悉了b+tree索引的一个基本的创建过程,接下来我们来了解下b+tree索引与具体记录之间的关系。 拿之前的图为...

  • Pandas数据结构

    Pandas数据结构 Series 获取数据/索引 预览数据 通过索引获取数据 索引与数据的对应关系仍保持在数组运...

  • B树、B+树和索引的关系

    前言 本文的重点不是B树、B+树和索引的性质、使用等,而是三者之间的关系。为了便于说明,我们先定义一条数据记录为一...

  • rails与mysql数据类型对应关系

    记录下rails与mysql数据类型之间的对应关系,方便自己以后查找

  • Mysql性能优化-5.索引

    1.索引是什么? 索引,index。关键字与数据位置映射关系,称之为索引。关键字:从数据中提取,用于标识,检索数据...

  • 聚簇索引与非聚簇索引

    聚簇索引:将数据与索引存放到一起,索引结构的叶子结点保存了行数据(索引临近的记录在物理存储上也是临近的)非聚簇索引...

  • SDTM介绍(3)-- 数据集或记录之间的关系描述

    1、数据集或记录之间的关系 在很多情况下,需要表示数据集或记录之间的关系。SDTM规定了8中不同类型的关系: 同一...

  • 图算法相关

    在图表展示时,有需要用到相关的算法来进行计算图之间的相关数据,做个记录。算法用于记录点与点之间的关联关系。记录形式...

  • 索引

    1、什么是索引 索引是一种利用某种规则的数据结构与实际数据的关系加快数据查找的功能;索引数据节点中有着实际文件的位...

  • MySQL笔记(第一天)

    MySQL笔记(第一天) 数据库是用来存放数据的仓库 关系模型:记录和记录之间通过属性之间的关系来进行连接,保证数...

网友评论

    本文标题:(三)索引与数据记录之间的关系

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