[阅读: 408] 2006-09-08 08:51:20
首先,仔细分析应该在哪些表中的哪些属性列上建立索引.如果一个表的行本来就不多,或取值很少的列 (如性别),或有关的经常性查询对表的行的选择面超过15 %时不要索引,因为这种索引是不会提高效率的.当表的行数较多时,应该:a. 检查分析所有SQL查询语句中的where从句,及其使用频率,再结合统计每个属性列出现在where从句中的次数,得出一个属性在限定条件中的使用概率P;b. 估算每个属性值域中元素的个数Q;c. 估算属性修改、插入、删除的频率R.如果一个表中的某列的P和Q都较大,则最好在该列上建立索引,它会较大程度地提高查询速度;如果P都很小,Q也不是很大,则索引不会起太大的作用;如果P 和 Q都较小,R较大,则一定不要在该列上建立索引,因为这个索引不仅不会提高效率反而会增加更新、删除操作的负担.
其次,考虑建立哪种类型的索引.最好多建立一些单列或两列的窄索引,而少定义多列复合宽索引,更不要定义重复索引.
另外,合理使用聚族索引会加快处理速度,尤其是update和delete操作的效率.由于聚族索引的行的物理顺序与行的索引顺序相同,它的叶级页就是数据页,数据页使用聚族索引的逻辑顺序在物理存储介质上物理排序,因此对于至少有一个索引的表,最好使其中一个成为聚族索引.当然这里重要的是考虑在什么列上使用聚族索引.主要依据是表中有关列唯一值的数目,如果数目较小,最好将该索引定义为聚族索引.但要避免对唯一值较多而经常性的查询结果集却不大的列上定义聚族索引,否则会导致性能下降.