分类: Oracle DB |
1.在哪些列上建立索引?
先要了解业务需求,总结出应该会按照哪几个字段来进行查询
需要平衡query和DML的需要,常用于(子)查询的表应建立索引
如果一个列具有很低的数据基数,并且或者可具有空值,不应作为索引列
2.建什么样的索引?
B-树索引:
选择性高的字段建立B-树索引最好。如果数据量太大,可考虑把索引分区,在并发情况下通常会表现很好。相当于把一棵很大的B树拆开成了多棵小树。
唯一索引OR组合索引:
对常用SQL语句的where条件中的列建立唯一索引或组合索引,组合条件查询中相应的组合索引更有效
函数索引:
如果where语句中不得不对查询列采用函数查询,如upper函数,最好建立相应函数索引
位图索引:
对于低基数集的列,并包含OR等逻辑运算,考虑用Bitmap索引,对于从大量行的表中返回大量的行时也可以考虑Bitmap索引
但Bitmap索引会影响并发,要避免在有大量并发DML运算的表中使用Bitmap索引
3.建立索引时应该注意些什么
把索引建到不同的表空间中
用统一的extent大小: 五个block的倍数或者tablespace指定的MINIMUM EXTENT的倍数
创建索引考虑用NOLOGGING参数,重建索引的时候也一样
创建索引时INITRANS值应该比相应的table的值高一些