一、virtual index 、unusable index、invisiable index定义
oracle11g后,index又推出了一个新的特性invisiable,invisiable表示不可见。在oracle11g之前,index有一个这样的特性unusable,unusable表示不可用。
unusable index表示该索引停止使用,所占资源不会继续增长,随着dml的操作,oracle并不会去维护unusable的开销。如果当unusable index需要继续使用时,则需要重新建立rebuild,此时有一个缺点就是当数据量大时会耗时。
而oracle11g后,推出的invisiable index,对index的管理又做出了一个大的改进,当索引invisiable时,表示索引不可见,不可见指的是对oracle执行计划的不可见,但其是存在的,所以当invisiable index需要使用时只需要改变其属性变为visiable就行,并不会带来更大的开销问题,不过它的劣势在于dml操作时会存在开销问题。oracle11g还提供了这样一个参数OPTIMIZER_USE_INVISIBLE_INDEXES,默认值为false,意思是是优化器是否使用invisible index索引,当OPTIMIZER_USE_INVISIBLE_INDEXES=true,Optimizer优化器就会识别invisiable index。
virtual index表示不存在物理实体的索引,它不存在任何的io和资源开销问题,但它对oracle执行计划是可见的,virtual index设计的主要目的是用来评估索引性能问题,根据执行计划来判断是否应该建立索引,virtual index在测试性能方面是非常有意义的。