数据库开发(8)索引与散列

来源:互联网 发布:宜春学院网络教学平台 编辑:程序博客网 时间:2024/06/06 01:58

1、有两种基本的索引类型:

顺序索引:基于值的顺序排列。

散列索引:基于将值平均分布到若干散列桶中。一个值所属的散列桶是由一个散列函数决定的。

2、对于技术选用基于以下因素考虑:

1)访问类型:访问类型可以包括找到具有特定属性值的记录,以及找到属性值落在某个特定范围内的记录。

2)访问时间:在查询中使用该技术找到一个特地给数据项或数据项集所需要的时间。

3)插入时间:插入一个新数据项所需的时间。该值包括找到插入这个数据项的正确位置所需的时间,以及更新索引结构所需的时间。

4)删除时间:删除一个数据项所需的时间。该值包括找到待删除项所需的时间,以及更新索引结构所需的时间。

5)空间开销:索引结构所占用的额外存储空间。

3、通常需要在一个文件上建立多个索引。用于在文件中查找记录的属性或属性集称为搜索码。

4、顺序索引:

每个索引结构与一个特定的搜索码相关联。

1)聚集索引:包含记录的文件按照某个搜索码指定的顺序排序。(也称主索引)

2)非聚集索引:搜索码指定的顺序与文件中记录的物理顺序不同。(也称辅助索引)

索引顺序文件:在搜索码上有聚集索引的文件。

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

顺序索引有两类:

稠密索引:文件中的每个搜索码都有一个索引项。

稀疏索引:只为搜索码的某些值建立索引项。(只有索引是聚集索引时才能使用稀疏索引)

6、多级索引:

具有两级或两级以上的索引。利用多级索引搜素记录与用二分法搜索记录相比需要的I/O操作要少的多。

7、索引的更新:

每当文件中有记录插入或删除时,索引都需要更新。

8、辅助索引:

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

9、多码上的索引:

一个搜索码可以有多个属性。一个包含多个属性的搜索码称为复合搜索码。

10、B+树索引文件:

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

各叶结点中值的范围互不重合,除非有重复的搜索码,在这种情况下,一个值可能出现在多个叶结点中。

B+树的非叶结点形成叶结点上的一个多级(稀疏)索引。非叶结点中所有的指针都是指向树中结点的指针。

11、不唯一的搜索码:

一个关系可以拥有多个包含同一搜索码值的记录(即两条或多条记录在索引属性上拥有相同的值)。

唯一化属性:一个用来确保搜索码唯一的额外属性。

当比较搜索码值时,具有原始搜索码值的查找可以简单忽略唯一化属性值。

12、B+树文件组织:

树的叶结点存储的是记录而不是指向记录的指针。可以用来存储大型数据对象。

13、索引的批量加载:将大量项一次插入到索引中。

14、多码访问:如果存在多个索引则使用多个索引,或使用建立在多属性搜索码上的索引。

15、覆盖索引:存储一些属性(但不是搜索码属性)的值以及指向记录的指针。

16、静态散列:顺序文件组织的一个缺点是我们必须访问索引结构来定位数据,或者必须使用二分法搜索,这将导致过多的I/O操作。

桶:表示能存储一条或多条记录的一个存储单位。通常一个桶就是一个磁盘块,但也可能小于或大于。

散列函数:h是一个从K到B的函数。(K是所有搜索码值的集合,B是所有桶地址的集合)。

散列可以用于两个不同的目的。在散列文件组织中,通过计算所需记录搜索码值上的一个函数直接获得包含该记录的磁盘块地址。

在散列索引组织中,把搜索码以及与它们相关联的指针组织成一个散列文件结构。

17、最坏的可能是散列函数把所有的搜索码值映射到同一桶中。所以我们希望分布是均匀的和随机的。

18、桶溢出:

当插入一条记录时,记录映射到的桶没有足够的空间。原因有:桶不足,偏斜。

偏斜:某些桶分配到的记录比其他桶多,所以即使其他桶仍有空间,某个桶也可能溢出。原因:

1)多条记录可能具有相同的搜索码。

2)所选的散列函数可能会造成搜索码的分布不均。

19、散列索引:将搜索码及其相应的指针组织成散列文件结构。

20、顺序索引和散列的比较:数据库设计者需要考虑的问题:

1)索引或散列组织的周期性重组代价是否可接受?

2)插入和删除的相对频率如何?

3)是否愿意以增加最坏情况下的访问时间为代价优化平均访问时间?

4)用户可能提出那些类型的查询?

21、位图索引:

是一种为多码上的就爱男单设计查询设计的特殊索引,尽管每个位图索引都是建立在一个码之上的。为了使用位图索引,关系中的记录必须按顺序编号,比如从0开始。

位图就是位的一个简单数组。每个位图都有和关系中的记录数相等数目的位。




0 0