数据库中常用的存取方法为索引方法和聚簇方法。索引方法包括B+树索引和Hash索引。

  1. B+树索引
    对一个或多个属性列建立索引(组合索引、唯一索引)。
    一般如下:

    • 如果一个(或一组)属性经常在查询条件里出现,则考虑建立索引。
    • 如果一个属性经常作为最大值和最小值等聚集函数的参数。
    • 如果一个(或一组)属性经常在连接操作的连接条件中出现。

      关系上定义的索引并不是越多越好,系统为维护索引要付出代价。更新频率高的关系索引不宜太多。

  2. Hash索引
    如果一个关系的属性主要出现在等值连接条件或主要出现在等值比较选择条件中,而且满足下列条件之一
    • 一个关系的大小可以预知,而且不变。
    • 关系的大小动态改变,但数据库管理系统提供了动态hash存取方法。
      则可选择hash存取方法。
  3. 聚簇索引
    为了提高某个属性(或属性组)的查询速度,把这个或这些属性上具有相同值得元组集中存放在连续得物理块中成为聚簇。该属性(或属性组)成为聚簇码。
    一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。
    首先涉及候选聚簇一般来说
    (1) 对经常在一起进行连接操作的关系建立聚簇。
    (2) 如果一个关系的一组属性经常出现在相等比较条件中,则该单个关系可建立聚簇。
    (3) 如果一个人关系的一个(或一组)属性上的值重复率很高,则此单个 关系可建立聚簇。即对应每个聚簇码值呃平均元组数不能太少,太少 则聚簇的效果不明显。

    然后检查候选聚簇中的关系,取消其中不必要的关系。
    (1) 从聚簇中删除经常进行全表扫描的关系。
    (2) 从聚簇中删除更新操作多于连接操作的关系。
    (3) 不同的聚簇中可能包含相同的关系,一个关系可以在某一个聚簇中,但不能同时加入多个聚簇。要从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即在这个聚簇上运行各种事务的总代价最小。

    对已有关系建立聚簇将导致关系中元组移动其物理存储位置,并使次关系上原来建立的所有索引无效,必须重建。当一个元组的聚簇码值改变时,该元组的存储位置也要做相应移动,聚簇码要相对稳定,以减少修改聚簇码值所引起的维护开销。
    因此,当通过聚簇码进行访问或连接是该关系的主要应用,与聚簇码无关的其他访问很少或者是次要的,这时可以使用聚簇。尤其当 SQL 语句中包含与聚簇码有关的ORDER BY、GROUP BY、UNION、DISTINCT等子句或短语时,使用聚簇特别有利,可以省去对结果集的排序操作;否则很可能适得其反。