索引创建指南

1、频繁在where 从句中出现

2、频繁在join关联字段中

3、选择具有高选择性的键

4、别在具有很少的不同值的键上使用B-tree索引。这类键或表达式经常具有较差选择性,所以不会是性能有更多的优化,

5、除非经常选择的值比其他的值出现的频次要低。要是这种情况,可有效使用位图索引,但是如果在高并发的OLAP系统,位图索引要是经常被改动,则不要使用位图索引。

6、不要在常被修改到字段上建索引。

7、不要对仅出现在where从句中的函数或表达式中的字段建索引,要么就建函数索引

8、可考虑在外键上建索引。

9、创建一个索引时,评估该索引给查询带来的性能优化是否比因其而引起INSERT,UPDATE,DELETE操作的性能下降以及索引占用的空间更要值得。

10、复合索引

提高了选择性(有时,组合的选择性要比单个列的选择性要高)

降低I/O(如果锁被查询选择的列都在复合索引中,那Oracle可通过访问索引来返回值而不需要访问表。)

经常在WHERE从句中通过以AND组合出现,并且尤其是组合后比单一键选择性更高,该组合上可考虑常见复合索引

如果查询的列是组合列的子集,可考虑基于这些键建复合索引

索引的顺序:

该索引能够使WHERE从句可组成索引的前导列

如果WHERE从句中有几个键非常高频,可仅就这几个列键建复合索引

如果所有的列出现在WHERE的频率都一样并且数据基于其中一列已物理排序,那么可将此列作为复合索引的第一个key。

使用非唯一性索引实现唯一性:
你可以用表的已存在的在UNIQUE约束字段或PRIMARY KEY约束字段上的非唯一性索引强制实现唯一性。这样做的好处在于即使约束DISABLE了,

该索引仍然有效。所以,可让一个DISABLED的UNIQUE或PRIMARY KEY重新ENABLE,不需要再重建唯一性索引。这样可以在大数据表的ENABLE

操作中节省很多时间。