使用下面的方针决定是否使用聚簇表:
- 经常被应用的连接语句访问的表可以使用聚簇表
- 如果应用只是偶尔地使用表连接,或者频繁修改连接列的值,则不要使用聚簇表。修改一行的聚簇键值比修改非聚簇表的值花费更长的时间,因为Oracle可能为了维护聚簇而把被修改的行从一个块迁移到另一个块。
- 如果应用经常对聚簇中的一个表进行全表扫描,则不要使用聚簇表。对聚簇表的全面扫描会比对非聚簇表的全表扫描花费更长的时间。因为表被存储在一起,Oracle可能要读取更多的块。
- 如果经常查询一个主表的记录和与之对应的子表记录,这种主子表可以放到一个聚簇中。子表和主表记录被存储在相同的数据块,因此当查询它们的时候将被一起读到内存中,Oracle会执行更少的I/O。
- 如果经常查询与同一主表记录相关联的许多子表记录,单独把子表存储在一个聚簇中。这种方法改善与同一主表记录相关联的子表记录的查询性能,同时不会降低对主表全表扫描的性能。还有一种可选则的方法是使用索引组织表。
- 如果聚簇中所有表的同一聚簇键值大于一个或两个Oracle块,则不要使用聚簇表。为了访问聚簇中的一行,Oracle要读取包含这行键值的所有块。如果这些行占用了多个块,则访问单一行将比访问非聚簇表里的相同行需要更多的读取次数。
- 当每一个聚簇键值所对应的行数有很大不同时不要使用聚簇表。这将造成低基数键值的空间浪费,还将造成与高基数键值的冲突,会降低性能。
要针对应用的要求来考虑使用聚簇的优缺点。例如,你需要确定连接语句的性能提升是否超过了修改聚簇值的性能下降,你可能还需要做实验比较聚簇和单独存储所花费的处理时间。