📜  数据库中的索引 |设置 1

📅  最后修改于: 2021-09-09 16:20:28             🧑  作者: Mango

索引是一种通过最小化处理查询时所需的磁盘访问次数来优化数据库性能的方法。它是一种数据结构技术,用于快速定位和访问数据库中的数据。

索引是使用几个数据库列创建的。

  • 第一列是包含表的主键或候选键的副本的搜索键。这些值按排序顺序存储,以便可以快速访问相应的数据。
    注意:数据可能会或可能不会按排序顺序存储。
  • 第二列是数据引用指针,它包含一组指针,其中包含可以找到特定键值的磁盘块的地址。

索引具有各种属性:

  • 访问类型:这是指访问类型,例如基于值的搜索、范围访问等。
  • 访问时间:它是指查找特定数据元素或元素集所需的时间。
  • 插入时间:指的是找到合适的空间并插入新数据所花费的时间。
  • 删除时间:查找项目并删除它以及更新索引结构所花费的时间
  • 空间开销:指索引需要的额外空间。

一般来说,有两种类型的文件组织机制,其次是索引方法来存储数据:

  1. 顺序文件组织或有序索引文件:在这种情况下,索引基于值的排序顺序。这些通常是快速且更传统的存储机制类型。这些有序或顺序文件组织可能以密集或稀疏格式存储数据:
    • 密集指数:
      • 对于数据文件中的每个搜索键值,都有一个索引记录。
      • 该记录包含搜索关键字以及对具有该搜索关键字值的第一条数据记录的引用。

    • 稀疏索引:
      • 索引记录仅出现在数据文件中的少数项目中。每个项目都指向一个块,如图所示。
      • 为了定位一条记录,我们找到最大搜索键值小于或等于我们要查找的搜索键值的索引记录。
      • 我们从索引记录指向的那条记录开始,并沿着文件中的指针(即顺序)继续,直到找到所需的记录。

  2. 哈希文件组织:索引基于在一系列桶中均匀分布的值。到其上的值被分配了桶是由一个称为散列函数的函数确定。

索引的方法主要有以下三种:

  • 聚集索引
  • 非聚集或二级索引
  • 多级索引
  1. 聚集索引
    当两个以上的记录存储在同一个文件中时,这些类型的存储称为集群索引。通过使用集群索引,我们可以减少搜索原因的成本,因为与同一事物相关的多个记录存储在一个地方,并且还提供了两个以上表(记录)的频繁连接。
    聚集索引是在有序数据文件上定义的。数据文件按非关键字段排序。在某些情况下,索引是在非主键列上创建的,对于每条记录可能不是唯一的。在这种情况下,为了更快地识别记录,我们会将两列或更多列组合在一起以获取唯一值并从中创建索引。这种方法称为聚簇索引。基本上,具有相似特征的记录被分组在一起,并为这些组创建索引。
    例如,每学期学习的学生被分组在一起。即第一学期学生,第二学期学生,第三学期学生等进行分组。

    集群索引
    根据名字排序的聚集索引(搜索键)

    主要索引:
    这是一种聚集索引,其中数据根据搜索键进行排序,并使用数据库表的主键来创建索引。它是索引的默认格式,它会导致顺序文件组织。由于主键是唯一的并且以排序的方式存储,因此搜索操作的性能非常高效。

  2. 非聚集或二级索引
    非聚集索引只是告诉我们数据的位置,即它为我们提供了一个虚拟指针列表或指向数据实际存储位置的引用。数据不是按照索引的顺序物理存储的。相反,数据存在于叶节点中。例如。一本书的内容页。每个条目都为我们提供了存储信息的页码或位置。这里的实际数据(本书每一页的信息)没有组织,但我们有一个有序的参考(内容页)数据点实际所在的位置。我们只能在非聚集索引中进行密集排序,因为稀疏排序是不可能的,因为数据在物理上没有相应地组织起来。
    与聚集索引相比,它需要更多的时间,因为为了通过进一步跟踪指针来提取数据,需要完成一些额外的工作。在聚集索引的情况下,数据直接出现在索引的前面。

    索引3

  3. 多级索引
    随着数据库规模的增长,索引也随之增长。由于索引存储在主内存中,因此单级索引可能会变得太大而无法通过多次磁盘访问进行存储。多级索引将主块分隔成各种较小的块,以便相同的块可以存储在单个块中。外部块被分成内部块,内部块又指向数据块。这可以很容易地以较少的开销存储在主存储器中。