Oracle不可见索引
1、在创建索引时设置为不可见索引
语法:
CREATE INDEX 索引名 ON 表名(列名) INVISIBLE;
2、将一个现有的索引改为不可见索引/将一个不可见的索引改回为一个可见的索引
语法:
ALTER INDEX 索引名 INVESIBLE | VISIBLE;
实例:
1、查看nice用户下t_stu开始的索引信息
select index_name, table_name, tablespace_name, index_type, visibility, status
from dba_indexes
where owner = 'NICE'
4 and index_name LIKE 'T_STU%';
INDEX_NAME TABLE_NAME TABLESPACE_NAME INDEX_TYPE VISIBILIT STATUS
T_STU_NAME T_STU DATA_TABLEONE NORMAL INVISIBLE VALID
T_STU_ID T_STU DATA_TABLEONE BITMAP VISIBLE VALID
SQL>
2、更改索引t_stu_name为不可见索引
SQL> ALTER INDEX NICE.t_stu_name INVISIBLE;
Index altered.
SQL>
3、再次查看nice用户索引信息
select index_name, table_name, tablespace_name, index_type, visibility, status
from dba_indexes
where owner = 'NICE'
and index_name LIKE 'T_STU%';
INDEX_NAME TABLE_NAME TABLESPACE_NAME INDEX_TYPE VISIBILIT STATUS
T_STU_NAME T_STU DATA_TABLEONE NORMAL INVISIBLE VALID
T_STU_ID T_STU DATA_TABLEONE BITMAP VISIBLE VALID
SQL>
现在可以看到t_stu_name索引已经更改为不可见索引了(INVISIBLE) 自修改完之后,改表上执行任何SQL语句时,Oracle优化器都百分之百的保证不使用那个不可见的索引t_stu_name,即使使用了启示,也不管用。
4、将该不可见索引再次改为可见索引
SQL> ALTER INDEX NICE.t_stu_name VISIBLE;
Index altered.
SQL>
5、查询验证:
select index_name, table_name, tablespace_name, index_type, visibility, status
from dba_indexes
where owner = 'NICE'
4 and index_name LIKE 'T_STU%';
INDEX_NAME TABLE_NAME TABLESPACE_NAME INDEX_TYPE VISIBILIT STATUS
T_STU_NAME T_STU DATA_TABLEONE NORMAL VISIBLE VALID
T_STU_ID T_STU DATA_TABLEONE BITMAP VISIBLE VALID
SQL>
可以看到t_stu_name索引已经再次更改为可见索引(VISIBLE)
|