索引结构

索引结构  传统的索引

顺序文件是对关系中的元组按主键进行排序而生成的文件。

索引结构

                  索引文件                            数据文件

             图1 顺序文件(右)上的稠密索引(左)

稠密索引:一系列存储块:块中只存放记录的键以及指向记录本身的指针,稠密索引文件中的索引块保持键的顺序与文件中的排序顺序一致。

一般查找键与指针所占的存储空间远小于记录本身,这样一个块中能存储比较多的索引块,从访问磁盘的特性理解也就是查找索引里面的指针会更快,从而更快定位记录。

索引结构

              图 2 顺序文件上稀疏索引

稀疏索引只为数据文件的每个存储块设一个键-指针对,它比稠密索引节省了更多的存储空间,但查找给定值的记录需要更多的时间。只有当数据文件是按照某个查找键排序时,在该查找键上建立的稀疏索引才能被使用,而稠密索引则可以应用在任何的查找急键。

索引结构

连续文件且块大小相等好处在于我们可以在内存中计算出想要访问Disk上对应的数据块,从忽略索引文件中的指针而不必多一次访问I/O

在这先对稀疏索引和稠密索引进行一个简单的对比:

稀疏索引:对于相同的数据来说,与稠密索引相比占用较少的索引空间,但是查找记录时可能需要直接访问磁盘上的文件。

稠密索引:在不访问文件的情况下,就可以找到对应的记录,但是占据的索引空间较大。

对于已排序数据,且有重复的数据,建立索引的方法:

1. 稠密索引, 可以想象数据量非常大时,索引文件可能存在很多块中,这会拉慢查找速度

索引结构

2. 稀疏索引,索引块构建的方式:数据块中出现的与之前键不同的键的记录作为索引块中指针所指向的记录

索引结构

3. 稀疏索引,构建稀疏索引的方式是,每一数据块第一个记录

该方式与第2种方式的对比:

第2种方式在索引文件中查找到20和30对应的指针时,就可以确定数据文件中为20 20 30 

第3种方式在索引文件中查找到20和30对应的指针时,可以数据文件有两种可能:20 20 30与 20 30 30,所以要确定

20与30 之间是什么需要访问I/O

索引结构

总结: 根据以上三种情况,第2种方式是应该选取的方式

索引结构