DBMS索引
精华
小牛编辑
208浏览
2023-03-14
在DBMS中索引 -
- 索引用于通过最小化处理查询时所需的磁盘访问次数来优化数据库的性能。
- 索引是一种数据结构。它用于快速定位和访问数据库表中的数据。
索引结构
可以使用某些数据库列创建索引。
- 数据库的第一列是搜索键,它包含表的主键或候选键的副本。主键的值按排序顺序存储,以便可以轻松访问相应的数据。
- 数据库的第二列是数据引用。 它包含一组指针,用于保存磁盘块的地址,可以在其中找到特定键的值。
索引方法
有序索引
通常对索引进行排序以使搜索更快,排序索引称为有序索引。
示例: 假设有一个包含几千条记录的employee
表,每条记录的长度为10
个字节。 如果它们的ID是以1
,2
,3 ......
等开头,那么如果要使用ID为543
来搜索学生的信息。
- 对于没有索引的数据库,需要从磁盘块开始搜索直到
543
。 DBMS将在读取543 * 10 = 5430
字节后读取记录。 - 在索引的情况下,直接使用索引进行搜索,DBMS将在读取
542 * 2 = 1084
字节后读取记录,这与前一种情况相比非常少。
主键
- 如果索引是基于表的主键创建的,那么它被称为主索引。 这些主键对于每个记录都是唯一的,并且在记录之间包含
1:1
的关系。 - 由于主键按排序顺序存储,因此搜索操作的性能非常高效。
- 主索引可以分为两种类型:密集索引和稀疏索引。
密集索引
- 密集索引包含数据文件中每个搜索键值的索引记录,它使搜索更快。
- 在此,索引表中的记录数与主表中的记录数相同。
- 它需要更多的空间来存储索引记录本身。索引记录具有搜索键和指向磁盘上实际记录的指针。
稀疏索引
在数据文件中,索引记录仅针对少数项目出现。 每个项目都指向一个区块。
在此,索引不是指向主表中的每个记录,而是指向间隙中主表中的记录。
聚类索引
- 聚簇索引可以定义为有序数据文件。 有时,索引是在非主键列上创建的,对于每个记录可能不是唯一的。
- 在这种情况下,为了更快地识别记录,将对两列或更多列进行分组以获取唯一值并从中创建索引。此方法称为聚类索引。
- 对具有相似特征的记录进行分组,并为这些组创建索引。
示例: 假设公司在每个部门中包含多个员工。假设使用聚簇索引,其中属于同一Dept_ID
的所有员工都被视为在单个集群中,并且索引指针指向整个集群。 这里Dept_ID
是一个非唯一键。
之前的架构很容易混淆,因为一个磁盘块由属于不同集群的记录共享。如果为单独的集群使用单独的磁盘块,那么它是一种更好的技术。
二级索引
在稀疏索引中,随着表的大小增加,映射的大小也会增加。 这些映射通常保存在主存储器中,因此地址获取应该更快。 然后,辅助存储器根据从映射获得的地址搜索实际数据。 如果映射大小增加,那么获取地址本身会变慢。 在这种情况下,稀疏索引效率不高。 为了克服这个问题,引入了二级索引。
在二级索引中,为了减小映射的大小,引入了另一级索引。 在该方法中,最初选择列的巨大范围,使得第一级映射变小。 然后将每个范围进一步划分为更小的范围。 第一级的映射存储在主存储器中,因此地址获取更快。 第二级和实际数据的映射存储在辅助存储器(硬盘)中。
示例:
- 如果要在图中找到卷
111
的记录,则它将搜索第一级索引中小于或等于111
的最高条目。 这个级别将达到100
。 - 然后在二级索引级别,它再次执行
max(111)<= 111
并获得110
。现在使用地址是:110
,它进入数据块并开始搜索每个记录,直到它达到111
。 - 这是在此方法中执行搜索的方式。插入,更新或删除也以相同的方式完成。