http://blog.youkuaiyun.com/ceys_2011/article/details/7225297
顺序索引
1、稠密索引:对应文件中搜索码的每一个值有一个索引记录。索引记录包括搜索码值以及指向具有该搜索码值的第一个数据记录的指针。可更快定位记录。
2、稀疏索引:只为搜索码的某些值建立索引记录。占空间较小,插入和删除时的维护开销较小。
多级索引
在主索引上构造一个稀疏索引,如果要搜索一个记录,首先在外层索引上用二分法找到不大于所需搜索码值的最大收缩码值锁对应的记录。指针指向一个内层索引块。我们对这一块做扫描,知道找不到不大于所需搜索码值的最大搜索码值所对应的记录。这一记录的指针指向包含所查找记录的文件块。
B+树索引文件
典型的B+树结点结构最多包含n-1个搜索码值,以及n个指针,马格结点中的索引码值按次序存放。
散列索引
动态散列法:
开始时,散列值的b位不必全部使用,任意时刻使用的位数i满足0<=i<=b。这样的i个位作为附加的桶地址表的入口偏移量。i的值伴随着数据库大小的变化而增大或减小。
图中出现在桶地址上方的i表明散列值h(K)中有i位需要用来决定对应于K的桶。几个连续的表项可能指向同一个桶,它们有一个共同的散列前缀,其长度可能小于i。因此,给每一个桶附加一个整数值,用来表明共同的散列前缀长度。附加给桶j的证书是ij。桶地址表中指向桶j的表项数目为2^(i-1)。为了确定含有搜索码值Ki的桶的位置,先找到h(Ki)高i为二进制字串对应的表项,再根据表项中的指针来得到桶的位置。
比较
索引或散列住址的周期性充足代价可否接受?
插入和删除的相对频率怎样?
为了优化平均访问时间而增加最坏情况下的访问时间的做法是否可取?
用户可能提出哪些类型的查询?
对于如select A1,A2,…An from r where Ai=c的查询,散列更可取;对于如select A1,A2,…An from r where Ai<c2 and Ai>c1,顺序索引更可取。
多码访问
1.网格文件:
网格数组的每个单元包含一个指向桶的指针,桶中包含若干搜索码值和记录指针。虚线框指向同一个桶。网格文件大大减少了多码查询的处理时间。然而,它增加了空间开销,偶那个是增加了记录插入和删除的开销。如果经常对文件插入,必须周期地对文件进行重组。
分段散列
分段散列只用于码值,而不是区间,分段散列中没有目录,而由散列值直接给出桶地址。