用于估计代价的目录信息
n——关系r中的元组数目
b——含有关系r的元组的块数目
s——关系r中一个元组的大小
f——关系r的块因子,即一个块中能存放的关系r的元组数
V(A,r)——关系r中属性A所具有的不同值的数目。若A为关系r的码,V(A,r)即为n
SC(A,r)——关系r的属性A的选择基数。给定关系r及其属性A,假定至少有一条记录满足等值条件,那么SC(A,r)表示在属性A上满足某个等值条件的平均记录数。
fi——树形结构索引i的内部节点的平均扇出。
HTi——索引i的层数。平衡树:HTi=logfi(V(A,r)),散列:HT=1。
LBi——索引i中最底层索引块数目。
选择运算
1、线性搜索:n/f。
2、二分法搜索:E=[log2(b)+SC(A,r)/f] - 1。如假设属性值均匀分布,则查询σA=a(r)的SC(A,r)=nr/V(A,r)
利用索引选择:索引结构提供了定位和存取数据的一条路径。索引的使用带来了存取包含索引数据块的代价。
3、主索引,码属性等值比较:E=HT+1
4、主索引,非码属性等值比较:E=HT+[SC(A,r)/f]
5、辅助索引,等值比较:最坏情况,每条满足等值条件的记录存在于不同的块上,E=HT+SC(A,r)
6、主索引,比较:E=HT+c/f
7、辅助索引,比较:假定至少有一半记录满足条件,则要存取一般的最底层索引块,并通过索引存取一般数目的文件记录,囧过从索引根块到使用的第一个索引块的一条路径,E=HT+LB/2+n/2
复杂选择的实现:
合取:预计对选择σ(r)的结果大小估计大小为s,关系中一个元组满足选择条件θ的概率为s/nr。假设个条件相互独立,则某条记录满足全部条件的概率是全体概率的乘积,nr*(s1*s2……*sn)/(nr^n)
析取:1减去条件全不满足的概率,1-(1-s1/nr)*…*(1-sn/nr)
8、利用一个索引的合取选择:首先判断是否存在某个简单条件中的某个属性上的一条存取路径,若存在,用上面的选择算法之一可以用来检索满足改条件的记录。
9、使用组合索引的合取选择。
10、通过标识符的交集实现合取选择:如果条件所涉及的字段上有带记录指针的索引,对每个索引进行扫描,获取那些只想满足单个条件的记录的指针,取交集。
11、通过标识符的病机实现析取选择。
注意考虑索引是否具有聚集特性。
排序
对不能全部放在内存中的关系进行排序称为外排序。
外部排序归并算法:
(M表示内存中用于缓冲的页面数)
(1)建立多个排序的归并段文件:
i=0;
repeat
读入M块关系数据或剩下的不足M块数据;
在内存中对关系的这一部分进行排序;
将排好序的数据写到归并段文件Ri中;
i=i+1;
until 到达关系末尾
(2)对归并段文件归并。为N个归并段文件Ri各分配一页内存缓冲页,并分别读入一数据块
repeat
在所有缓冲页中按序挑选第一个元组;
把该元组作为输出写出,并将其从缓冲页中删除;
if 任何一个归并段文件Ri的缓冲页为空并且没有到达Ri末尾
then 读入Ri的下一块到相应的缓冲页;
until 所有的缓冲页均为空
br(2[logm-1(br/M)]+1)