《数据库系统概念》学习笔记——索引与散列

数据库系统概念——索引与散列索引与散列基本概念顺序索引稠密索引和稀疏索引多级索引索引的更新辅助索引多码上的索引B+B^+B+ 树索引文件B+B^+B+树的结构B+B^+B+树的查询B+B^+B+树的更新不唯一的搜索码多码访问使用多个单码索引多码索引覆盖索引静态散列散列函数桶溢出处理散列索引动态散列数据结构查询和更新静态散列与动态散列比较顺序索引和散列的比较位图索引位图索引结构位图操作的高效实现位图和B+B^+B+树SQL中的索引定义索引与散列基本概念有两种基本的索引类型:顺序索引。 基于值的顺序排
摘要由CSDN通过智能技术生成

索引与散列

基本概念

有两种基本的索引类型:

  • 顺序索引。 基于值的顺序排序。
  • 散列索引。 基于将值平均分布到若干散列桶中。
    一个值所属的散列桶是由一个函数决定的,该函数称为散列函数

对于顺序索引和散列的几种技术,对每种技术的评价必须基于下面这些因素:

  • 访问类型: 能有效支持的访问类型。访问类型可以包括找到具有特定属性值的记录,以及找到属性值落在某个特定范围内的记录。
  • 访问时间: 在查询中使用该技术找到一个特定数据项或数据项集所需的时间。
  • 插入时间: 插入一个新数据项所需的时间。该值包括找到插入这个数据项的正确位置所需的时间,以及更新索引结构所需的时间。
  • 删除时间: 删除一个数据项所需的时间。该值包括找到待删除项所需的时间,以及更新索引结构所需的时间。
  • 空间开销: 索引结构所占用的额外存储空间。倘若存储索引结构的额外空间大小适度,通常牺牲一定的空间代价来换取性能的提高是值得的。

通常需要在一个文件上建立多个索引。

用于在文件中查找记录的属性或属性集称为搜索码
这里的码的定义与主码、候选码以及超码中的定义不同。

如果一个文件上有多个索引,那么它就有多个搜索码。

顺序索引

如果记录的文件按照某个搜索码指定的顺序排序,那么该搜索码对应的索引称为聚集索引
聚集索引也称为主索引;它可以建立在任何搜索码上。

搜索码指定的顺序与文件中记录的物理顺序不同的索引称为非聚集索引辅助索引

常用术语“聚集的”和“非聚集的”来代替“聚集”和“非聚集”。

在搜索码上有聚集索引的文件称作索引顺序文件
是针对既需顺序处理整个文件又需随机访问单独记录的应用而设计的。

下图是取自大学例子中instructor 记录的一个顺序文件。
在这里插入图片描述

稠密索引和稀疏索引

索引项索引记录由一个搜索码值和指向具有该搜索码值的一条或者多条记录的指针构成。
指向记录的指针包括磁盘块的标识和标识磁盘块内记录的块内偏移量。

可以使用的顺序索引有两类:

  • 稠密索引
    稠密索引中,文件中每个记录有一个关联的索引项。
    在稠密聚集索引中,索引项包括搜索码值以及指向具有该搜索码值的第一条数据记录的指针。
    具有相同搜索码值的其余记录顺序地存储在第一条数据记录之后,记录根据相同的搜索码值排序。
    在稠密非聚集索引中,索引必须存储指向所有具有相同搜索码值的记录的指针列表。

  • 稀疏索引
    在稀疏索引中,只为搜索码的某些值建立索引项。
    只有索引是聚集索引时才能使用稀疏索引。

利用稠密索引通常可以比稀疏索引更快速定位一条记录。
稀疏索引也有比稠密索引优越的地方:它所占用空间较小,并且插入和删除时所需的维护开销也较小。

多级索引

如果索引小到可以放在主存中,搜索一个索引项的时间就会很短。但是,如果索引过大而不能放在主存中,那么当需要时,就必须从磁盘中取索引块。
于是搜索一个索引项需要多次读取磁盘块。

搜索一个大的索引可能是一个相当耗时的过程。
为了处理这个问题,我们像对待其他仍顺序文件那样对待索引文件,并且在原始的内层索引上构造一个稀疏的外层索引。
如下图:

在这里插入图片描述
具有两级或两级以上的索引称为多级索引
利用多级索引搜索记录与用二分法搜索记录相比需要的I/O操作要少得多。

多级索引和树结构紧密相关,正如用于内存索引的二叉树。

索引的更新

没当文件中有记录插入或删除时,索引都需要更新。
此外,如果文件中的记录更新,任何搜索码属性受影响的索引也必须更新。

单级索引的更新算法:

  • 插入
    首先用出现在待插入记录中的搜索码值进行查找,再根据索引的类型进行下一个操作。

    稠密索引
    1.如果该搜索码的值不在索引中,系统就在索引中合适位置插入相应索引项。
    2.否则,
    如果索引项存储的是指向具有相同搜索码值的所有记录的指针,系统就在索引项中增加一个指向新纪录的指针。
    否则,索引项存储一个仅指向具有相同搜索码值的第一条记录的指针,系统把待插入的记录放到具有相同搜索码值的其他记录之后。

    稀疏索引
    假设每索引为每个块保存一个索引项。
    如果系统创建一个新的块,它会将新块中出现的第一个搜索码值(按照搜索码的顺序)插入到索引中。
    如果这条插入的记录含义块中的最小搜索码值,那么系统就更新指向该块的索引项;否则,系统对索引不做任何改动。

  • 删除
    为删除一条记录,系统首先查找要删除的记录,然后再进行下一步操作。

    稠密索引
    1.如果被删除记录是具有这个特定搜索码值的唯一记录,系统从索引中删除相应的索引项。
    2.否则,
    如果索引项存储的是指向所有具有相同搜索码值的记录的指针,系统就从索引项中删除指向被删除记录的指针。
    否则,索引项存储的是指向具有该搜索码值的第一条记录的指针。这种情况下,如果被删除的记录是具有该搜索码值的第一条记录,系统就更新索引项,使其指向下一条记录。

    稀疏索引
    1.如果索引不包含具有被删除记录搜索码值的索引项,则索引不做任何修改。
    2.否则,
    如果被删除的记录是具有该搜索码值的唯一记录,系统用下一个搜索码值(按搜索码顺序)的索引记录替换相应的索引记录。如果下一个搜索码值已经有一个索引项,则删除而不是替换该索引项。
    否则,如果该搜索码值的索引记录指向被删除的记录,系统就更新索引项,使其指向具有相同搜索码值的下一条记录。

多级索引的插入和删除算法是对上述算法的一个简单扩充。

辅助索引

辅助索引必须是稠密索引,对每个搜索码值都有一个索引项,而且对文件中的每条记录都有一个指针。
聚集索引可以是稀疏索引,可以只存储部分搜索码值。

候选码上的辅助索引看起来和稠密索引没有太大的区别,只不过索引中一系列的连续值指向的记录不是连续存放的。

辅助索引的结构和聚集索引不同。
如果聚集索引的搜索码不是候选码,索引只要指向具有该特定搜索码值的第一条记录就足够了,因为其他记录可以通过对文件进行顺序扫描得到。
反之,如果辅助索引的搜索码不是一个候选码,仅仅具有指向每个搜索码值的第一条记录的指针是不够的。
具有同一个搜索码值的其他记录可能方在文件的任何地方。
因此,辅助索引必须包含指向每一条记录的指针。

可以用一个附加的间接指针层来实现非候选码的搜索码上的辅助索引。
这样的辅助索引中,指针并不直接指向文件,而是指向一个包含文件指针的桶。
如下图:
在这里插入图片描述关于删除和插入的过场也适用辅助索引,所采用的操作和为文件中的每条记录存储一个指针的稠密索引需要的操作一样。
如果文件具有多个索引,无论何时修改文件,它的每个索引都必须更新。

赋值索引能够提高使用聚集索引搜索码以外的查询性能。但是,也明显增加了数据库更新的开销。

多码上的索引

一个包含多个属性的搜索码称为复合搜索码
这个索引的结构和任何其他索引一样,唯一不同的地方是搜索码不是单个属性,而是一个属性列表、

这个搜索码可以表示为形式如 ( a 1 , . . . , a n ) (a_1,...,a_n) (a1,...,an)的一组值,其中 A 1 , . . . , A n A_1,...,A_n A1,...,An是索引属性。
搜索码值按字典需排序。

一个在复合码上的有序索引可以用来有效地查找某些其他类型的查询。

B + B^+ B+ 树索引文件

B + B^+ B+ 树索引采用平衡树结构,其中树根到树叶的每条路径的长度相同。
树中每个非叶结点有 [n/2] ~ n 个子女,其中 n 对特定的树是固定的。

B + B^+ B+树的结构

B + B^+ B

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
连续系统的时域分析是信号与系统学习中的重要部分。时域分析研究的是信号在时间域内的变化规律,常用的分析方法包括冲激响应法、单位阶跃响应法和相应方程法。 1. 冲激响应法 冲激响应法是一种基于系统输入信号的冲激函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个冲激序的加权和,然后计算出系统对每个冲激的响应,得到系统的冲激响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为冲激序的加权和,从而得到系统对任何输入信号的响应。 2. 单位阶跃响应法 单位阶跃响应法是一种基于系统输入信号的单位阶跃函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个单位阶跃函数的加权和,然后计算出系统对每个单位阶跃函数的响应,得到系统的单位阶跃响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为单位阶跃函数的加权和,从而得到系统对任何输入信号的响应。 3. 相应方程法 相应方程法是一种基于系统微分方程的解析解来分析系统时域特性的方法。具体来说,根据系统微分方程的特性,可以得到系统的传递函数,然后通过拉普拉斯变换将输入信号和传递函数变换到频域内,最终通过反变换得到系统的时域响应。 以上三种方法都是分析连续系统时域特性的重要方法,各自适用于不同的情况。掌握这些方法可以帮助我们更好地理解和分析连续系统的时域特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值