关闭

聚簇

标签: 存储数据库磁盘sql
327人阅读 评论(0) 收藏 举报
分类:
为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇。

聚簇功能

  聚簇功能可以大大提高按聚簇码进行查询的效率。例如要查询信息系的所有学生名单,设信息系有500名学生,在极端情况下,这500名学生所对应的数据元组分布在500个不同的物理块上。尽管对学生关系已按所在系建有索引,由索引很快找到了信息系学生的元组标识,避免了全表扫描,然而再由元组标识去访问数据块时就要存取500个物理块,执行500次I/O操作。如果将同一系的学生元组集中存放,则每读一个物理块可得到多个满足查询条件的元组,从而显著地减少了访问磁盘的次数
  聚簇功能不但适用于单个关系,也适用于经常进行连接操作的多个关系。即把多个连接关系的元组按连接属性值聚集存放,聚簇中的连接属性称为聚簇码。
  这就相当于把多个关系按"预连接"的形式存放,从而大大提高连接操作的效率。
  一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。
  选择聚簇存取方法,即确定需要建立多少个聚簇,每个聚簇中包括哪些关系。
  下面先设计候选聚簇,一般来说:
  (1)对经常在一起进行连接操作的关系可以建立聚簇;
  (2)如果一个关系的一组属性经常出现在相等比较条件中,则该单个关系可建立聚簇;
  (3)如果一个关系的一个(或一组)属性上的值重复率很高,则此单个关系可建立聚簇。即对应每个聚簇码值的平均元组数不是太少。太少了,聚簇的效果不明显。

  

然后检查候选聚簇中的关系,取消其中不必要的关系:

  (1)从聚簇中删除经常进行全表扫描的关系;
  (2)从聚簇中删除更新操作远多于连接操作的关系;
  (3)不同的聚簇中可能包含相同的关系,一个关系可以在某一个聚簇中但不能同时加入多个聚簇。要从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即在这个聚簇上运行各种事务的总代价最小。
  必须强调的是,聚簇只能提高某些应用的性能,而且建立与维护聚簇的开销是相当大的。对已有关系建立聚簇,将导致关系中元组移动其物理存储位置并使此关系上原有的索引无效,必须重建。当一个元组的聚簇码值改变时,该元组的存储位置也要做相应移动,聚簇码值要相对稳定,以减少修改聚簇码值所引起的维护开销。
  因此,当通过聚簇码进行访问或连接是该关系的主要应用,与聚簇码无关的其他访问很少或者是次要的,这时可以使用聚簇。尤其当SQL语句中包含有与聚簇码有关的ORDER BY,GROUP BY,UNION,DISTINCT等子句或短语时,使用聚簇特别有利,可以省去对结果集的排序操作;否则很可能会适得其反。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    最新评论