zoukankan      html  css  js  c++  java
  • mysql(六)索引的数据结构

    先做抽象定义如下:

    定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同的数据记录,key是互不相同的;data为数据记录除key外的数据。

    B-tree的特点:

    d为大于1的一个正整数,称为B-Tree的度(度可以理解为空间一定的条件下内节点的有效容量,与key大小和data大小有关)。

    h为一个正整数,成为B-Tree的高度。

    每个非叶子节点由n-1个key和n个指针组成,其中d<=n<=2d。

    每个叶子节点最少包含一个key和两个指针,最多包含2d-1个key和2d个指针,叶节点的指针均为null。

    所有叶节点具有相同的深度,等于树高h。

    key和指针互相间隔,节点两端是指针。

    一个节点中的key从左到右递增排序。

    所有节点组成树结构。

    每个指针要么为null,要么指向领一个节点。

    每个节点申请同等大小的空间。

    如果某个指针在节点node最左边且不为null,则其指向节点的所有key小于v(key1)v(key1),其中v(key1)v(key1)为node的第一个key的值。

    如果某个指针在节点node最右边且不为null,则其指向节点的所有key大于v(keym)v(keym),其中v(keym)v(keym)为node的最后一个key的值。

    如果某个指针在节点node的左右相邻key分别是keyikeyi和keyi+1keyi+1且不为null,则其指向节点的所有key小于v(keyi+1)v(keyi+1)且大于v(keyi)v(keyi)。

    按key检索数据的算法:从根节点进行二分查找,找到则返回对应节点的数据,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针。前者查找成功,后者查找失败。

    B+tree的特点:

    内节点不存储data,只存储key。

    叶子节点不存储指针。

    叶子节点与内节点一般大小不同。

    叶子节点增加一个指向相邻叶子节点的指针,就形成了带有顺序访问指针的B+Tree。通过这种方式,可以提高区间访问的性能。

    基于B+tree的特点,内节点不存储data,意味着出度可以比B-tree更高,而出度越大,索引性能越好。

    MyISAM

    MyISAM叶子节点的data域存放的是数据记录的地址,检索索引时,如果指定的key存在,则取出data域的地址,然后用这个地址读取记录。这种索引方式叫做“非聚集”。

    InnoDB

    InnoDB主索引的叶子节点包含了完整的数据记录,这种索引叫做聚集索引。InnoDB的表必须有主键,没有显示指定,系统会自动选择一个列,如果不存在这种列,则自动生成一个隐含字段作为主键。

    InnoDB辅助索引data域存储相应记录主键的值而不是地址。

    参考文章:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

  • 相关阅读:
    浏览器后台报错,Vue组件的坑:property or method " " is not defined on the instance but referenced during render.Make sure that this property in reactive,either in the data,or for class-based
    去掉iview Modal组件中的取消和确定按钮
    vue实现不刷新整个页面刷新数据
    webstorm永久激活码
    文字过长设置隐藏,鼠标hover时显示在title上
    图片与Base64的转换
    iview的poptip插件,自动换行与自定义content的内容
    RTL基本知识:阻塞赋值与非阻塞赋值
    RTL基本知识:线网或变量宽度与端口宽度不匹配
    RTL基本知识:敏感信号列表中的数组
  • 原文地址:https://www.cnblogs.com/asfeixue/p/9244718.html
Copyright © 2011-2022 走看看