有的时候为了节省空间会删除一些不需要的索引,可能涉及的业务场景比较多,直接删除索引会引发不必要的结果。下面这个方法是比较优雅的删除索引:
--创建索引
SQL> create index idx_hellob_empno on hellob(empno);
Index created.
--查看索引
SQL> select INDEX_NAME,INDEX_TYPE,TABLE_NAME,TABLE_OWNER,status,visibility from user_indexes where table_owner='SCOTT';
INDEX_NAME INDEX_TYPE TABLE_NAME TABLE_OWNER STATUS VISIBILIT
------------------------------ --------------------------- ------------------------------ ------------------------------ -------- ---------
IDX_HELLOB_EMPNO NORMAL HELLOB SCOTT VALID VISIBLE
PK_DEPT NORMAL DEPT SCOTT VALID VISIBLE
使用invisible禁用索引,让索引不可见,没有实际删除,但是优化器不会使用该索引
SQL> alter index idx_hellob_empno invisible;
Index altered.
SQL> select INDEX_NAME,INDEX_TYPE,TABLE_NAME,TABLE_OWNER,status,visibility from user_indexes where table_owner='SCOTT';
INDEX_NAME INDEX_TYPE TABLE_NAME TABLE_OWNER STATUS VISIBILIT
------------------------------ --------------------------- ------------------------------ ------------------------------ -------- ---------
IDX_HELLOB_EMPNO NORMAL HELLOB SCOTT VALID INVISIBLE
PK_DEPT NORMAL DEPT SCOTT VALID VISIBLE
观察一段时间,假如没有影响,删除索引
drop index index_name
alter index idx_hellob_empno visible;可以让索引迅速可见,并且不会锁表