��1、问题的提出
��到目前为止,我们都隐含地假设在关系上查询时只使用一个索引或散列表。如果存在多个索引,该如何处理呢?
��假设文件account有两个索引,分别建立在branch-namebalance上。考虑如下查询:
select loan-number
from account
where branch-name = "Downtown" AND balance = 800
对于这个查询,如何利用上面已有的两个索引呢?
��2、多个索引的利用
��处理上面的查询有以下三种利用索引的策略:
��⑴�利用branch-name上的索引,找出Downtown分支机构的所有记录。然后检查每条记录是否满足条件:balance = 800;
���利用balance上的索引,找出所有余额等于800的记录。然后检查每条记录是否满足条件:branch-name = "Downtown" ;
���分别利用上述两个索引找出满足各自条件的所有记录的指针。计算这两个指针集合的交即可。
��在上面三种策略中,只有第三个方案同时利用了两个索引。但它有可能是最糟糕的选择,如果以下条件成立的话:
��①�属于Downtown分支机构的记录太多;
��②�余额为800的记录太多;
��③�Downtown分支机构中余额为800的记录又很少。
��这样的话,为了得到一个很小的结果,我们将不得不扫描大量的指针。最好的解决方案是在复合搜索码(branch-name, balance)上建立和使用索引,这样的索引也叫复合索引。
��