表物理设计基本建议:
1、除特殊需求,建议采用普通的堆表(heap table)。
2、每个表在创建的时候,建议制定所在的表空间,不用默认表空间。
3、建议根据dml操作频度数值,如果update操作频度高,则可将PCTFREE设置为较高,反之,则可将PCTFREE设置为较低。
4、当表中存在大量delete操作时,PCTUSED值的增大,将提高空间的使用率。
5、对并发访问量比较高的表和索引,将INITRANS设置较大,特别是针对索引,例如设置INITRANS设为10.
6、对较小的代码和参数表,可考虑IOT表技术。
7、如果某个静态表关系比较密切,则可以采用聚簇表的方法。
索引设计基本建议:
1、通常而言,交易系统建立为B*树索引,对数据库仓库,则可考虑Bitmap、Bitmap join等索引。
2、通过分析应用软件对数据访问方式,展开索引设计。
3、索引和数据分别存储在不同的表空间。
4、不要对索引字段进行运算。
5、不要对索引字段进行格式转换。
6、不要对索引字段使用函数。
7、加强使用和索引效率的分析。
8、不要对索引字段使用NULL值,因为索引不能存储空值。
B*树单字段索引设计建议:
1、分析sql语句中的约束条件字段。
2、如果约束条件不固定,建议创建针对单字段的普通B*索引。
3、选择可选性最高的字段建立索引。
4、如果是夺标连接sql语句,注意被驱动表(drived table)的连接字段是否需要创建索引。
5、通过多种sql分析工具,分析执行计划并以量化形式评估效果。
复合索引设计建议
1、分析sql语句中的约束条件字段。
2、如果约束条件字段比较固定,则优先考虑创建多字段的普通B*树复合索引。
3、如果字段是主键或唯一条件,或者可选性非常高的字段,尽管约束条件字段比较固定,也不一定要建成复合索引,可建成单字段索引,降低复合索引开销。
4、在复合索引的第一个字段作为约束条件,该复合索引才会启用,按照可选性高低,进行复合索引字段的排序。
本文建议摘自罗敏老师的《oracle品悟高性能优化》。