第12章:索引-1

索引对于高效获取数据行、强制唯一性以及引用约束的有效实现都是很关键的结构。Oracle数据库提供了蛇和不同应用访问方法需求的多种索引。

不恰当活不正确的索引策略可能会导致性能问题。

oracle数据库11Gr2中可以使用的索引基于其所使用的算法从管以上可以分为3类:B-树形索引、位图索引和索引组织表。

1、位图索引的实现适用于不经常进行更新‘、插入和删除的列。他们更适合与具有较少唯一值的静态列。(例如性别)

2、B-树形索引,有很多种索引类型如分区索引、压缩索引、基于函数的索引都实现为B-树形索引。特殊的索引类型如索引组织表以及索引组织表上的次级索引同样也实现为B-树形索引。

 

一、什么时候使用索引

  典型的基于索引的访问路径通常包含下面3步:

  1、便利索引树并在将SQL语句中的谓语应用到索引列后收集叶子块的行编号。

  2、使用行编号从表数据块中获取数据行。

  3、在所获取的数据行上应用其余的谓语来得出最终结果集。

选择最优索引列时需要考虑的内容。

1、如果应用代码访问某张表的时候在某一列上使用了灯饰活着范围谓语,考虑对着一列进行索引就是很好的策略。

2、考虑谓语的基数以及列的选择度也是很重要的。例如:某个列只有两个唯一值并且是均匀分布的,那么这一列可能就不适合简历B-树形索引。因为这一列使用等式谓语的时候会获取50%的行。另一方面,如果这个列有两个唯一值但不是均匀分布的,也就是有一个值仅在少数的数据行中出现且应用使用这个不常出现的列值来访问表,这种情况下最好在这一列上建立索引。

3、如果一个列具有几个唯一值,一个唯一值很少,那么针对这个值的谓语就应该使用索引,其中一个唯一值很多,那么就不应该使用索引。针对这种情况可以使用直方图信息来使得优化器可以根据使用的是常量或是绑定变量来选择最优执行计划。

4、考虑列的排序。是否需要建立索引列,需要考虑列是否在谓语中使用而不是完全依赖于列的选择度。即使一个列有更高的选择度。

5、考虑索引的成本,插入、删除和更新都需要维护索引,如果索引列需要大量更新的花,这个索引的维护成本就更高,因为建有索引的列的更新会导致索引内部发生删除和插入。这也有可能会引入额外的资源争夺点。

6、考虑列的长度。建有索引列原唱,索引也就越大。

7‘、在多列索引中,如果引导列只有很少的唯一值,考虑将该所因建立为压缩索引,这样索引的尺寸将会变的更小,因为压缩索引中不保存重复值。

8、如果谓语在索引列上使用函数,那么这个列上的索引就不会被使用。

9、不要在需要大幅修改的列上简历位图索引。位图索引的内部实现更适合于只有很少唯一值的只读列。如果索引列进行了更新,位图索引的大小可能会迅速增大。对一个位图索引的过多修改还可能会导致大量的锁资源争夺。位图索引在数据仓库应用中的使用更为普遍。

 

 

你可能感兴趣的:(索引)