• InnoDB存储引擎的 B+ 树索引


    B+ 树是为磁盘设计的 m 叉平衡查找树,在B+树中,所有的记录都是按照键值的大小,顺序存放在同一层的叶子节点上,各叶子节点组成双链表。叶节点是数据,非叶节点是索引。

    首先,需要清楚:B+ 树索引并不能定位到给定键值的具体行,B+树索引只能找到数据行所在的页。然后,数据库把页读入内存,在内存中查找所需要的行。

    B+树索引在数据库中有一个特点是高扇出性,在数据库中,B+树的高度一般都在2 ~ 4层,即查找某一键值的行记录只需要24次的IO。数据库的B+树索引分为聚集索引和辅助索引,不管是聚集还是辅助的,其数据结构都是 B+ 树。聚集索引和辅助索引不同的是,叶子节点存放的是否是一整行信息。

    聚集索引,就是按照每张表的主键构造一棵 B+ 树,叶节点中存放的是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。聚集索引的节点分为叶节点和非叶节点,叶节点中存放完整的行数据,而非叶节点中存放键值和叶节点的偏移量。

    聚集索引对于主键的排序查找和范围查找速度非常快。如用户需要查询一张注册用户的表,查询最后注册的 10 位用户,由于 B+ 树索引是双向链表的,用户可以快速找到最后一个数据页,并取出 10 条数据。对于范围查询,如果要查询主键某一范围内的数据,通过索引节点可以得到数据页的范围,之后读取数据页即可。

    辅助索引,叶节点并不包含行记录的全部数据。叶节点中除了包含键值以外,每个页节点的索引行还包含一个书签。该书签用来告诉 InnoDB 存储引擎,哪里可以找到与索引相对应的行数据。这么理解吧:对于给定的辅助索引键值,定位到辅助索引行,得到该行主键,然后通过主键,去查找聚集索引,得到完整的行数据,即要遍历 2 B+ 树。

  • 相关阅读:
    Microsoft SQL Server 自定义函数整理大全 [转]
    eclipse将android项目生成apk并且给apk签名
    Android实现对图片的缩放、剪切、旋转、存储
    Android 之 ProgressDialog用法介绍
    Android中Path类的lineTo方法和quadTo方法画线的区别
    Android仿微信二维码扫描
    Android中Bitmap,byte[],Drawable相互转化
    hibernate基础之无法自动创建表总结
    Android获取短信验证码
    Android之常见问题集锦Ⅰ
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8503128.html
Copyright © 2020-2023  润新知