DBMS 中的索引:什么是索引,索引类型及示例

⚡ 智能摘要

数据库索引是一种数据结构技术,它通过映射快速检索记录。ping 指向其记录磁盘地址的搜索键。主索引、辅助索引、聚簇索引、多级索引和 B 树索引在空间占用、速度和维护方面各有优劣。

  • 🗂️ 核心理念: 索引是一个两列的小表,将键与指向记录磁盘块的指针配对。
  • 📇 主要索引: 一个按键排序的文件,分为密集型和稀疏型两种变体。
  • 🔎 密集型与稀疏型: 密集索引为每个键存储一个条目;稀疏索引存储的条目较少,以节省空间。
  • 🏷️ 二级索引: 它基于非排序字段构建,使用桶来访问每个匹配的记录。
  • 📚 Cluster索引: 将具有非唯一键的行分组到一个集群中。
  • 🌳 B树索引: 平衡的多级树,其链接的叶节点支持随机和顺序访问。
  • 权衡: 索引可以加快读取速度,但会减慢插入、更新和删除速度,并且会占用额外的空间。

数据库中的索引

什么是索引?

索引 索引是一种数据结构技术,它允许您快速地从数据库文件中检索记录。索引是一个只有两列的小表。第一列包含表的主键或候选键的副本。第二列包含一组…… 指针 保存存储该特定键值的磁盘块的地址。

索引:

  • 输入一个搜索关键词。
  • 有效地返回匹配记录的集合。

如果没有索引,数据库必须扫描每一行才能回答查询。有了索引,它可以直接跳转到匹配的数据块,这就是为什么索引类型的选择对性能影响很大。

DBMS 中的索引类型

数据库中的索引类型
数据库中的索引类型

数据库索引是根据其索引属性定义的。两种主要的索引方法类型是:

  • 主索引
  • 二级索引

DBMS 中的主索引

主索引是一个固定长度的有序文件,包含两个字段。第一个字段与主键相同,第二个字段指向特定的数据块。在主索引中,索引表中的条目始终存在一对一的关系。

主指数又分为两种类型:

  • 致密指数
  • 稀疏指数

致密指数

在密集索引中,数据库中每个搜索键值都会创建一个记录。这有助于加快搜索速度,但需要更多空间来存储索引记录。在这种方法中,记录包含搜索键值,并指向磁盘上的实际记录。

数据库管理系统中的密集索引

稀疏指数

稀疏索引是指仅针对文件中部分值创建的索引记录。稀疏索引有助于解决密集索引带来的问题。 DBMS在这种技术中,一系列索引列存储相同的数据块地址,当需要检索数据时,就获取该块地址。

稀疏索引仅存储部分搜索键值的索引记录。它占用空间更小,插入和删除操作的维护开销也更低,但查找记录的速度比密集索引慢。

下面是一个稀疏索引的数据库索引示例。

数据库管理系统中的稀疏索引

密集索引与稀疏索引

两种主要指数变体之间存在相反的权衡取舍,总结如下。

方面 致密指数 稀疏指数
参赛作品 每个搜索键一个 每个街区一个
太空 更多 Less
搜索速度 更快 比较慢
维护 更高 降低

DBMS 中的二级索引

在数据库管理系统中,二级索引可以由每个记录都具有唯一值的字段生成,并且该字段应该是候选键。它也被称为非聚集索引。

这种两级数据库索引技术用于减少映射ping 第一层的大小。对于第一层,选择了一个较大的数字范围,因此地图ping 尺寸始终保持较小。

二级索引示例

让我们通过一个数据库索引示例来理解二级索引。在银行账户数据库中,数据按账户编号 (acc_no) 顺序存储,但您可能需要查找 ABC 银行特定分支机构的所有账户。

在这里,您可以为每个搜索键创建一个二级索引。索引记录指向一个存储桶,该存储桶包含指向所有具有该特定搜索键值的记录的指针。

数据库管理系统中的二级索引

ClusterDBMS 中的索引

在聚集索引中,记录本身存储在索引中,而不是指针。有时,索引会创建在非主键列上,而这些列的值对于每条记录可能并不唯一。在这种情况下,您可以将两个或多个列组合起来以获得唯一值,并创建一个索引,这种索引称为聚集索引。这也有助于您更快地找到记录。

计费示例: 假设一家公司在各个部门招聘了许多员工。在这种情况下,需要为属于同一部门的所有员工创建一个聚类指数。

它们被视为一个单一的集群,索引指向整个集群。这里,Department_no 是一个非唯一键。

什么是多级索引?

当主索引无法完全放入内存时,会创建多级索引。这种索引方法可以减少访问任意记录所需的磁盘访问次数。记录以顺序文件的形式保存在磁盘上,并在该文件之上创建稀疏索引。

数据库管理系统中的多级索引

B-树索引

B树索引是数据库管理系统中最广泛使用的树状索引数据结构。它是一种多级树状索引格式,采用平衡的索引方式。 二叉搜索树B 树的所有叶子节点都保存着实际的数据指针。

此外,所有叶子节点都通过链表相互连接,这使得 B 树能够支持随机访问和顺序访问。

数据库管理系统中的B树索引

  • 叶节点必须具有 2 到 4 个值。
  • 从根到叶的每一条路径长度大多相等。
  • 除了根节点之外的非叶子节点有 3 到 5 个子节点。
  • 除了根节点和叶节点之外的每个节点都有 n/2 到 n 个子节点。

在以精确匹配查找为主,范围扫描很少见的情况下, 散列 可以作为 B 树索引的一种更快的替代方案。

索引的优点

索引的主要优势在于:

  • 它有助于减少检索数据所需的 I/O 操作总数,因此您无需直接从表中访问行。
  • 它为用户提供更快捷的数据搜索和检索服务。
  • 它可以减少表空间,因为不需要在索引中存储每个链接行的 ROWID。
  • 叶节点中的数据已经按键值排序。

索引的缺点

索引的主要缺点有:

  • 要进行索引,表需要一个具有唯一值的主键。
  • 你不能在已经以相同方式建立索引的数据上再创建一个索引。
  • 您不能对索引组织表进行分区。
  • 索引会降低 INSERT、DELETE 和 UPDATE 查询的性能。

常见问题

主索引是基于文件排序所依据的字段(通常是主键)构建的。二级索引是基于不同的字段构建的,因此需要使用存储桶才能访问所有匹配的记录。

B 树保持平衡,因此每次查找所需的磁盘读取次数都相近且较少,并且其链接的叶子节点支持范围扫描。这使得它在点查询和范围查询方面都表现出色。

每次插入、更新和删除操作都必须维护相应的索引。索引越多,读取速度越快,但写入开销和存储空间也越大,因此只有在查询真正受益的情况下才应该创建索引。

AI 索引顾问会研究查询工作负载,并推荐能够最大限度降低成本的索引,同时标记那些从未被使用且只会增加开销的现有索引。

聚集索引按索引顺序存储行本身,因此一个表只能有一个聚集索引。非聚集索引保存指向行的指针,因此一个表可以有多个聚集索引。

总结一下这篇文章: