查看錶索引資訊 需要用到dba_indexes, dba_ind_columns,查看錶索引列資訊,包括複合索引的指令碼:
- WITH nonformat AS
- (SELECT i.index_name,i.table_name,t.column_name,t.column_position,i.uniqueness,t.table_owner
- FROM dba_indexes i, dba_ind_columns t
- WHERE i.table_name = t.table_name
- AND i.table_owner = t.table_owner
- AND i.index_name = t.index_name
- AND i.table_name = upper('t')
- --AND i.table_owner = upper('scott')
- ORDER BY t.index_name,t.column_position
- )
- SELECT nt.index_name,
- nt.table_name,
- (SELECT wmsys.wm_concat(column_name)
- FROM nonformat
- WHERE nt.index_name = index_name) column_names,
- nt.uniqueness,
- nt.table_owner
- FROM nonformat nt
- GROUP BY nt.index_name, nt.table_name, nt.uniqueness, nt.table_owner
- ORDER BY nt.index_name
索引列column_names以,分隔,需要指定表名與表的所有者資訊。
翻了幾頁書,做一下筆記哦!
發現多餘的索引有兩種方式
1.根據原理來判斷
考慮複合索引,根據複合索引的首碼性與選擇性,分析表欄位的記錄分布情況,對複合索引進行整合。
2.使用Oracle的監控特性
alter index <index_name> monitoring usage; --對index_name開啟監控
alter index <index_name> nomonitoring usage; --對index_name取消監控
select * from v$object_usage; --查詢索引是否被使用
- SQL> desc t
- Name Type Nullable Default Comments
- -------------- ------------- -------- ------- --------
- OWNER VARCHAR2(30) Y
- OBJECT_NAME VARCHAR2(128) Y
- SUBOBJECT_NAME VARCHAR2(30) Y
- OBJECT_ID NUMBER Y
- DATA_OBJECT_ID NUMBER Y
- OBJECT_TYPE VARCHAR2(19) Y
- CREATED DATE Y
- LAST_DDL_TIME DATE Y
- TIMESTAMP VARCHAR2(19) Y
- STATUS VARCHAR2(7) Y
- TEMPORARY VARCHAR2(1) Y
- GENERATED VARCHAR2(1) Y
- SECONDARY VARCHAR2(1) Y
- SQL> create index idx_t_created on t(created);
- Index created
- SQL> alter index idx_t_created monitoring usage;
- Index altered
- SQL> alter index idx_t_created nomonitoring usage;
- Index altered
- SQL> select * from v$object_usage;
- INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
- ------------------------------ ------------------------------ ---------- ---- ------------------- -------------------
- IDX_T_CREATED T NO NO 06/27/2011 21:31:56 06/27/2011 21:32:44