当你在批量加载数据的时候,想要改变性能或者测试删除索引后的性能,可以使用unusable index 或者是 invisible index
那么 unusable index 和invisible index 有什么区别呢
unusable index
(1)unusable index 是被优化器所忽略,并且不被dml操作维护。但是unusable index 可以改变批量加载的性能
(2) 任何现有的索引变成unusable后,索引段都会被删除
(3)由于unusable index 是不会被dml操作维护,索引变成unusable index后必须通过rebuild index 或者drop index and create index
(4)当参数
SKIP_UNUSABLE_INDEXES
=true时
(5)当参数
SKIP_UNUSABLE_INDEXES
=FALSE
(6)创建分区unusable indexhr@PROD> CREATE INDEX i_emp_ename ON employees_part (employee_id)2 LOCAL (PARTITION p1_i_emp_ename UNUSABLE, PARTITION p2_i_emp_ename);
Index created.
(7) 现有索引变成unusable索引
ALTER INDEX emp_email_uk UNUSABLE;
(1)从11g开始,就有了invisible index
(2)invisible index会被优化器所忽略,但是dml操作仍然会维护索引,批量提交数据不会提示性能
(3)如果在session或者system级别使用参数OPTIMIZER_USE_INVISIBLE_INDEXES=true,那么优化器会考虑使用invisible index
(4)你可以使一个分区索引变成invisible index,但是你不能使单个分区变成invisible index,而其他分区visible
(5)invisible index只是让优化器不可见,索引段中的数据还是存在的,并且dml操作维护索引,所以visible index后,不需要重建索引
(6)创建 invisible index
CREATE INDEX emp_ename ON emp(ename)
TABLESPACE users
STORAGE (INITIAL 20K
NEXT 20k)
INVISIBLE;
(7) 现有索引变成invisible index
ALTER INDEXindex INVISIBLE;
参考:http://docs.oracle.com/cd/E11882_01/server.112/e25494/indexes002.htm#CIHJIDJG