📜  DBMS-索引

📅  最后修改于: 2021-01-11 06:20:35             🧑  作者: Mango


我们知道数据是以记录的形式存储的。每个记录都有一个关键字段,这有助于使其被唯一识别。

索引是一种数据结构技术,可根据已在其中进行索引的某些属性从数据库文件中有效地检索记录。数据库系统中的索引类似于我们在书中看到的。

索引是基于其索引属性定义的。索引可以是以下类型-

  • 主索引-主索引在有序数据文件上定义。数据文件在关键字段上排序。关键字字段通常是关系的主关键字。

  • 二级索引-二级索引可以从作为候选关键字的字段中生成,该字段在每个记录中都有唯一的值,或者可以是具有重复值的非关键字。

  • 聚簇索引-聚簇索引是在有序数据文件上定义的。数据文件在非关键字段上排序。

顺序索引有两种类型-

  • 致密指数
  • 稀疏指数

致密指数

在密集索引中,数据库中的每个搜索键值都有一个索引记录。这样可以加快搜索速度,但需要更多空间来存储索引记录本身。索引记录包含搜索键值和指向磁盘上实际记录的指针。

致密指数

稀疏指数

在稀疏索引中,不会为每个搜索关键字创建索引记录。此处的索引记录包含搜索键和指向磁盘上数据的实际指针。要搜索记录,我们首先按索引记录进行操作,然后到达数据的实际位置。如果我们要寻找的数据不是我们通过遵循索引直接到达的位置,那么系统将开始顺序搜索,直到找到所需的数据为止。

稀疏指数

多级索引

索引记录包括搜索键值和数据指针。多级索引与实际的数据库文件一起存储在磁盘上。随着数据库大小的增加,索引的大小也会增加。迫切需要将索引记录保留在主存储器中,以加快搜索操作。如果使用单级索引,则无法在内存中保留较大的索引,这会导致多个磁盘访问。

多级索引

多级索引有助于将索引分解为几个较小的索引,以使最外层级如此小,从而可以将其保存在单个磁盘块中,该磁盘块可以轻松地容纳在主内存中的任何位置。

B +

AB +树是遵循多级索引格式的平衡二进制搜索树。 B +树的叶节点表示实际数据指针。 B +树确保所有叶节点保持相同的高度,从而保持平衡。此外,叶节点使用链接列表链接;因此,B +树可以支持随机访问以及顺序访问。

B +树的结构

每个叶节点与根节点的距离相等。 AB +树的顺序为n ,其中每个B +树的n都是固定的。

B +树

内部节点

  • 内部(非叶)节点除根节点外,至少包含⌈n/2⌉个指针。
  • 一个内部节点最多可以包含n个指针。

叶子节点

  • 叶节点至少包含⌈n/2⌉个记录指针和⌈n/2⌉个键值。
  • 一个叶节点最多可以包含n个记录指针和n个键值。
  • 每个叶节点包含一个指向下一个叶节点的块指针P ,并形成一个链表。

B +树插入

  • B +树从底部开始填充,每个条目都在叶节点处完成。

  • 如果叶子节点溢出-
    • 将节点分为两部分。

    • i =⌊(m + 1) / 2⌋的分区

    • 首先, i项存储在一个节点中。

    • 其余条目(从i + 1开始)将移动到新节点。

    • i密钥在叶的父复制。

  • 如果非叶子节点溢出-

    • 将节点分为两部分。

    • 将节点划分为i =⌈(m + 1) / 2⌉

    • 直到i的条目都保存在一个节点中。

    • 其余条目将移至新节点。

B +删除树

  • B +树条目在叶节点处被删除。

  • 搜索并删除目标条目。

    • 如果它是内部节点,请删除并替换为左侧位置的条目。

  • 删除后,将测试下溢,

    • 如果发生下溢,请从剩下的节点分发条目。

  • 如果无法从左侧进行分配,则

    • 从节点分配到它。

  • 如果无法从左侧或右侧进行分配,则

    • 合并具有左右节点的节点。