mysql 会根据主键,如果没定义主键则使用第一个唯一索引(如果都没有,会自动隐式的创建一个不可见的自增列)创建一个b+tree索引树。

b+tree的非叶子节点只会存储索引列和指向下级节点的指针,而叶子节点存储的是真实数据页。B+树叶子节点是顺序存储的,单个叶子节点也有指向相邻叶子节点的指针

聚簇索引(聚集索引)

聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。

Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。

聚簇索引的优缺点

优点:

1.数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快

2.聚簇索引对于主键的排序查找和范围查找速度非常快

缺点:

1.插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键

2.更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。

3.二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

辅助索引(非聚簇索引)

在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。

Innodb辅助索引的叶子节点并不包含行记录的全部数据,叶子节点除了包含键值外,还包含了相应行数据的聚簇索引键。

辅助索引的存在不影响数据在聚簇索引中的组织,所以一张表可以有多个辅助索引。在innodb中有时也称辅助索引为二级索引。

覆盖索引

使用索引列覆盖要查询的字段,如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是索引的列或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据

mysql辅助索引非叶子节点相关推荐

  1. mysql辅助索引非叶子节点_Mysql的聚集索引与辅助索引

    Mysql数据库中的B+树索引可以分为聚集索引和辅助索引(非聚集索引).本文将介绍一下两者. 聚集索引 聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引(这里不懂先放着,一会举例),每张表 ...

  2. 二叉树叶子结点,非叶子节点以及深度的计算

    二叉树叶子结点的计算 //统计叶子结点的数目 int LeafNum(BiTree T) {if (!T) {return 0;} else if (!T->lchild && ...

  3. 详解Pytorch中的requires_grad、叶子节点与非叶子节点、with torch.no_grad()、model.eval()、model.train()、BatchNorm层

    requires_grad requires_grad意为是否需要计算梯度 使用backward()函数反向传播计算梯度时,并不是计算所有tensor的梯度,只有满足下面条件的tensor的梯度才会被 ...

  4. 完全二叉树最后一个非叶子节点

    一个完全二叉树节点为数为N: 编号为 1~N 则 节点编号满足 left =2*i   right =2*i+1; 左为偶数,右为奇数: 配合数组时 编号为 0~N-1;  节点编号满足 left = ...

  5. 堆排序(完全二叉树)最后一个非叶子节点的序号是n/2-1的原因

    堆排序是基于完全二叉树实现的,在将一个数组调整成一个堆的时候,关键之一的是确定最后一个非叶子节点的序号,这个序号为n/2-1,n为数组的长度.但是为什么呢? 可以分两种情形考虑: ①堆的最后一个非叶子 ...

  6. 二叉树最后一个非叶子节点

    最后一个叶子节点的索引值是n-1,它的父节点索引值是[(n-1)-1]/2 = n/2 -1

  7. InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值

    转载自  InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值 RT,最近看书关于innodb的 InnoDB是索引组织表,所以完整的数据记录都存在聚集索引的叶子节点上 辅助索引的 ...

  8. mysql 辅助索引_MySQL InnoDB B+tree索引

    假设我们知道 InnoDB 数据页的结构,知道了各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边儿的记录生成一个页目录,在通 ...

  9. mysql 记录为叶子结点,MySQL---索引

    1.索引 B+Tree原理 1.数据结构 ??B Tree指的是Balance Tree,也就是平衡多叉查找树.平衡树是一颗查找树,并且所有的叶子节点位于同一层. 一个m阶的B树具有如下几个特征: ? ...

最新文章

  1. ev3pid巡线_PID算法巡线
  2. 独家 | 如何“扰乱”科技巨头用来监视你的数据
  3. Huffman 编码压缩算法
  4. 经典算法学习——冒泡排序
  5. NodeJS入门04-Express路由和中间件 - 小之 - 博客园
  6. MaxCompute存储力持续升级,每年节省不止一个亿
  7. kvm虚拟机网络设置隔离模式(一键shell脚本)
  8. TensorFlow十三 LSTM练习
  9. Intel 14nm PowerVR GPU成功验收:三星、台积电侧目
  10. scrapy学习笔记1---一个爬取的完整例子
  11. scala 返回值_Scala系列3-Scala函数
  12. 云之讯-》返回码105147
  13. 运维基础实用知识点--软件篇
  14. Lumion 9.0 建筑日景快速渲染实例教程
  15. 什么是模型管理和模型运维?
  16. 手把手教你打造一个VIM-IDE
  17. 给父母的礼物!一键让Android变身老人机
  18. 计算机软件著作权登记的申请流程是什么
  19. 恋爱法则在学英语背单词中的应用
  20. 获取当前时间的后一天/前一天或者后1小时/前1小时

热门文章

  1. C语言有关树的编程题,有关二叉树的递归算法 C语言编程
  2. ChatGPT提示语大全
  3. html overflow隐藏滚动条,html – 隐藏滚动条,但仍然可以滚动
  4. java实习生面试题_java实习生面试题.doc
  5. JAVA程序设计:近义词句子(LeetCode:5110)
  6. 千种字体包 | 满满的干货
  7. linux中Gy模式什么意思,Linux必学的60个命令 -其他
  8. Zepto.js 3D图片轮播旋转插件
  9. 《C++ Primer Plus》第18章:探讨 C++ 新标准(9)
  10. splunk 提取字段_Splunk数据处理