select> from Movie
where studiNname = 'zzz';
这里,zzz表示某一特定制片厂的名称,如,‘Disney’。
要是我们确信上面这类查询是典型的查询,那么就可不按主键title和year排序,而是按studioName来给元组排序。如4.1.5节讨论的那样,我们就在这个顺序文件上建立一个带重复键的主索引。这样做的好处在于当我们按给定的制片厂名称来查询电影时,可以在少数的几个,或者就比查找的记录所占最小存储块数多一个的存储块中找到所需记录。这使得该查询的磁盘I/O次数最少,使回答这种查询的效率极高。
但是,假如需要把电影的信息与制片厂的信息关联起来,仅按Movie的主键外的属性排序是没有帮助的。例如:
select> from Movie,Studio
where> Movie.studioName = Studio.name
即:找出制作电影“StarWars”的制片厂的经理。又如:
select president
from Movie,Studio
where address LIKE '%Hollywood%' and
Movie.studioName = Studio.name
即:找出所有在Hollywood制作的电影。为了实现这些查询,我们需要把关系Movie和Studio进行连接。
如果我们确信关系Moive和Studio之间的基于制片厂名称的连接很常见,就可以采用一种聚簇的文件结构来使这些连接效率更高。在这种结构中,关系Movie的元组和关系Studio的元组存放在相同的一系列块中。说得具体些,我们在每个Studio的元组后面存放关系Movie中该制片厂的所有电影元组。其结构如图4-16所示。