数据库中的索引技术详解
数据库中的索引技术详解
数据库索引技术是优化数据检索性能的关键手段。本文详细介绍了数据库中各种索引类型及其工作原理,包括顺序文件组织、哈希文件组织以及聚集索引、主键索引、非聚集索引和多级索引等具体实现方式。通过理解这些索引技术,可以显著提升数据库查询效率。
索引通过降低完成一次查询所需要的磁盘访问次数来提高数据库的性能,是一种定位和快速获取数据库中数据的数据结构技术。通常多个数据库区域用来生成索引。主键或者表的备选键是一样的,都在第一列,作为搜索键。为了加速数据取回,值也被保持有序状态。有必要强调一下,值的有序并不是必须的。第二列是数据引用或者指向了一堆存储特定键的值所在硬盘块地址的指针。
通常,有两种类型的文件组织机制用于索引存储数据。
顺序文件组织或有序索引文件
在这种情况下,索引基于值的排序顺序。这些通常是快速且更传统的存储机制类型。这些 Ordered 或 Sequential 文件组织可能以密集或稀疏格式存储数据。
- 密集Dense索引
- 对于数据文件中的每个搜索键值,都有一个索引记录。
- 此记录包含搜索键以及对具有该搜索键值的第一条数据记录的引用。
- 稀疏Sparse索引
- 索引记录仅针对数据文件中的少数项目显示。每个项目都指向一个块,如图所示。
- 要查找记录,我们查找搜索键值小于或等于我们要查找的搜索键值的索引记录。
- 我们从索引记录指向的记录开始,然后按照文件中的指针(即按顺序)继续,直到找到所需的记录。
- 所需访问次数 = log₂(n)+1, (这里 n=索引文件获取的块数)
哈希文件组织
索引基于在一系列存储桶中均匀分布的值。分配值的存储桶由称为哈希函数的函数确定。索引主要有几种方法:
1. 聚集索引
当同一文件中存储了两条以上的记录时,这种类型的存储称为集群索引。通过使用集群索引,我们可以降低搜索原因的成本,因为与同一事物相关的多条记录存储在一个地方,并且它还提供了两个以上的表(记录)的频繁连接。
聚集索引是在有序数据文件上定义的。数据文件按非键字段排序。在某些情况下,索引是在非主键列上创建的,这些列对于每条记录可能不唯一。在这种情况下,为了更快地识别记录,我们将两个或多个列组合在一起,以获取唯一值并从中创建索引。此方法称为聚集索引。实质上,具有相似属性的记录被分组在一起,并形成这些分组的索引。
2. 主键索引
这是一种聚集索引,其中数据根据搜索键进行排序,并使用数据库表的主键创建索引。它是索引的默认格式,它会导致顺序文件组织。由于主键是唯一的,并且以排序方式存储,因此搜索作的性能非常高效。
3. 非聚集索引或二级索引
非聚集索引只是告诉我们数据的位置,即它为我们提供了指向数据实际存储位置的虚拟指针或引用的列表。数据不按索引的顺序进行物理存储。相反,数据存在于叶节点中。例如。书籍的目录页。每个条目都为我们提供了存储信息的页码或位置。这里的实际数据(书中每一页的信息)没有组织起来,但我们有一个有序的参考(目录页)来说明数据点的实际位置。在非聚集索引中,我们只能有密集排序,因为稀疏排序是不可能的,因为数据没有相应地进行物理组织。
与聚集索引相比,它需要更多的时间,因为为了通过进一步跟踪指针来提取数据,需要完成一些额外的工作。对于聚集索引,数据直接位于索引前面。
4. 多级索引
随着数据库大小的增长,索引也会增长。由于索引存储在主内存中,因此单级索引可能会变得太大,无法通过多个磁盘访问进行存储。多级索引将主块分离为各种较小的块,以便可以将其存储在单个块中。外部块被划分为内部块,而内部块又指向数据块。这可以很容易地存储在主内存中,开销更少。
索引的功能
- 提供对某些数据项的快速访问的数据结构(如 B 树或哈希表)的开发称为索引。数据结构本身建立在索引列的值之上,这些列用于快速查找数据对象。
- 索引列最重要的列是根据它们的使用频率和它们所经历的查询类型来选择的。可以考虑索引列的基数、选择性和唯一性。
- 数据库使用几种不同的索引类型,包括主索引、辅助索引、聚集索引和非聚集索引。根据数据库系统的特定需求,每种形式的索引都有优点和缺点。
- 为了使数据库系统发挥最佳功能,需要定期维护索引。根据数据和使用模式的变化,维护工作包括构建、更新和删除索引。
- 数据库查询优化涉及索引,这是必不可少的。查询优化器利用索引,根据访问数据的成本和索引列的选择性为特定查询选择最佳执行策略。
- 数据库使用一系列索引策略,包括覆盖索引、仅索引扫描和部分索引。这些技术可最大程度地提高索引对特定类型的查询和数据访问的利用率。
- 当非连续数据块存储在索引中时,可能会导致索引碎片化,从而使索引效率降低。定期索引维护(例如碎片整理和重组)可以减少碎片。
结论
索引是一种非常有用的技术,有助于优化数据库查询中的搜索时间。数据库索引表由搜索键和指针组成。索引有四种类型:Primary、Secondary Clustering 和 Multivalued Indexing。主索引分为两种类型:密集索引和稀疏索引。当索引表包含每个搜索键的记录时,将使用密集索引。当索引表不对每条记录使用搜索键时,将使用稀疏索引。多级索引使用 B+ 树。索引的主要目的是为数据检索提供更好的性能。
本文原文来自GeeksforGeeks