DBMS(数据库管理系统)常常提供多种存取方法。存取方法是快速存取数据库中数据的技术,一般常用的存取方法有三种:第一种是索引方法,主要时B+树索引方法;第二种是聚簇(clustering)方法;第三种是hash方法。下面分别就每种方法的特点作一下总结。

1、索引存取方法

索引存取方法就是根据应用要求,确定对应关系的哪些属性列建立索引、哪些属性列建立组合索引、哪些索引要设计为唯一索引等。指导方案有以下几点:

1)如果一个(或一组)属性经常在查询条件中出现,则可将这个(或这组)属性建立索引(或组合索引)。

2)如果一个属性经常作为最大值和最小值等聚集函数的参数,则可考虑在这个属性上建立索引。

3)如果一个(或一组)属性经常在连接操作的连接条件中出现,则可考虑在这个(这组)属性上建立索引(或组合索引)。

索引数并非越多越好,系统为维护索引也要付出相应代价,所以如果一个关系的更新频率很高,则不易建立太多索引。

2、聚簇存取方法

为了提高某属性(或属性组)的查询速度,可以将这些属性(称为聚簇码,cluster key)上具有相同值的元组集中存放在连续的物理块上,这称为聚簇。

例如,信息系有学生500名,极端情况下, 500名学生所对应的元组分布在500个不同的物理块上,这样即使建立索引以避免全盘扫描,查询所有信息系的学生时也需要500次IO操作,但是,如果将所有信息系的学生信息集中存放,则每读一个物理块就可以获取多个学生的信息,可以大大降低IO操作次数,从而提高查询效率。设计候选聚簇的方案有:

1)对经常在一起进行连接操作的关系可以建立聚簇。

2)若一个关系的一组属性常出现在相等比较条件中,则在该单个关系上可建立聚簇。

3)若一个关系的一个(一组)属性上的值重复率很高,则在该单个关系上可建立聚簇。即对应每个聚簇码值的平均元组数不能太少,如果太少,聚簇的效果就不明显(IO操作次数的降低不明显)。

在候选聚簇中,剔除其中不必要的关系。例如:

1)从聚簇中剔除经常进行全表扫描的关系

2)从聚簇中剔除更新操作远远多于连接操作的关系

3)不同的聚簇中可能包含相同的关系,一个关系可以在某一聚簇中,但不能同时在多个聚簇中。

聚簇只能提高某些应用的性能,而聚簇的建立和维护开销很大。例如,对已有关系建立聚簇,会导致关系元组移动其物理位置,并使此关系上原有的索引无效,必须重建;当一个元组的聚簇码值发生改变时,该元组的存储位置也会发生改变。因此,通过聚簇码进行访问或连接是该关系的主要应用,与聚簇码无关的其他访问很少或很次要,则可用聚簇。尤其是sql语句中包含有与聚簇码有关的order by、group by、union、distinct等子句或短语时,使用聚簇很有利。

3、hash存取方法

有些DBSM提供了hash存取方法,选取hash存取方法的规则如下:

若一个关系的属性主要出现在等值连接条件中或相等比较选择条件中,并且满足以下条件之一,可以使用hash存取方法:

1)一个关系的大小可以预知,并且不变

2)若关系大小可以变动,且DBMS提供了动态hash存取方法。

以上三种方法中,最常用的是索引和聚簇,我们可以对创建好的表建立对应的索引和聚簇。