索引的合并、重建与监视

查看当前用户的所有索引:
SQL> select index_name,index_type,table_name,uniqueness from user_indexes;

INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES
------------------------------ --------------------------- TT_IDX NORMAL TT NONUNIQUE
PARTITION_IDX_LOCAL NORMAL PARTITIONED_2 NONUNIQUE
PARTITIONED_IDX NORMAL PARTITIONED_1 NONUNIQUE
UNION_T3_INDEX NORMAL T3 NONUNIQUE
UNIQUE

已选择20行。

已用时间: 00: 00: 00.45
查看索引所在的表和列
SQL> select index_name,table_name,column_name from user_ind_columns order by 2,3;
TEST1_PK TEST_TAB1 A_COL
TRUN_UNI_INDEX TRUN_TAB A
TT_IDX TT USER_ID
I5 TT1 DEPTNO

SQL> create table t_tab as select * from emp;


表已创建。

已用时间: 00: 00: 00.46
SQL> create index t_indx_empno on t_tab(empno);

索引已创建。

已用时间:  00: 00: 00.04
SQL> analyze index t_indx_empno validate structure;

索引已分析


已用时间:  00: 00: 00.03
SQL> select height,blocks,br_blks,lf_blks,lf_rows,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- ---------- ----
1 8 0 1 14 0

已用时间: 00: 00: 00.06
SQL> select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
1 8 0 1 14 0

已用时间: 00: 00: 00.01
SQL> update t_tab set empno=7777 where empno=7900;


已更新 1 行。

已用时间: 00: 00: 00.00
SQL> commit;

提交完成。

已用时间: 00: 00: 00.01
SQL> analyze index  t_indx_empno validate structure;


索引已分析

已用时间: 00: 00: 00.00
SQL> select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
1 8 0 1 15 1

已用时间: 00: 00: 00.00

SQL> update t_tab set empno=8888 where empno=7902;

已更新 1 行。

已用时间: 00: 00: 00.00
SQL> commit;

提交完成。

已用时间: 00: 00: 00.00
SQL> analyze index t_indx_empno validate structure;

索引已分析

已用时间: 00: 00: 00.01
SQL> select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
1 8 0 1 15 1

已用时间: 00: 00: 00.01


SQL> insert into t_tab select * from t_tab;

SQL> commit;

提交完成。

已用时间: 00: 00: 00.00


SQL> select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
1 8 0 1 15 1

已用时间: 00: 00: 00.01
SQL> analyze index  t_indx_empno validate structure;

索引已分析

已用时间: 00: 00: 00.00
SQL>  select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
2 8 1 4 1792 0

已用时间: 00: 00: 00.03

SQL> select count(*) from t_tab;

COUNT(*)
----------
1792

已用时间: 00: 00: 00.01
SQL> delete t_tab where rownum<=600;

已删除600行。

已用时间: 00: 00: 00.01
合并索引:
SQL> alter index t_indx_empno coalesce;

索引已更改。

已用时间: 00: 00: 00.06
SQL> analyze index t_indx_empno validate structure;

索引已分析

已用时间: 00: 00: 00.00
SQL> select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
2 8 1 3 1192 0

已用时间: 00: 00: 00.01
重建索引:
SQL> ALTER INDEX T_INDX_EMPNO REBUILD;

索引已更改。

已用时间: 00: 00: 00.18
SQL> ANALYZE INDEX T_INDX_EMPNO VALIDATE STRUCTURE;


索引已分析

已用时间: 00: 00: 00.00
SQL>  select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats;

HEIGHT BLOCKS BR_BLKS LF_BLKS LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- ---------- ---------- -----------
2 8 1 3 1192 0

已用时间: 00: 00: 00.01


注意:1.在查看索引的内容时,一定要先分析索引(analyze index my_index validate structure),不然的话数据不会重新收集。
2.合并只是合并枝干内的叶子,如果叶子属于不同的枝干则分别独立合并,合并不会改变索引的结构,不会改变索引的表空间和索引的类型。有事务的时候也可以合并索引。
3.重建只能够在没有事务的情况下进行,如果有未提交的事务,就会报错。
4.对本文中列的说明:
height:索引的高度
blocks:索引的总块数
br_blks:枝干块数
lf_blks:叶子块数
lf_rows:叶子内行数
del_lf_rows :叶子中被删除的行数

索引的监视与取消监视


查看索引是否使用过,如果长期未使用过的索引,就可以删除掉
1.生成监控索引的脚本文件:
spool c:\index_monitor.log
select 'alter index '||index_name||' monitoring usage;' from user_indexes;
spool off;
然后对该脚本文件修改一下,并执行,即可监控索引了。


查看索引是否使用过:
select table_name,index_name,used from v$object_usage;
如果used列对应的值为NO,则证明该索引未使用过。在监视过程中
我们不能够启动数据库,因为v$视图会被重新创建,丢失原来的监视。


2.生成取消监控索引的脚本文件:
spool c:\index_nomonitor.log
select 'alter index '||index_name||' nomonitoring usage;' from user_indexes;
spool off;


3.生成重建索引的脚本文件
spool /home/oracle/index_rebuild.sql
SELECT 'ALTER INDEX '||INDEX_NAME ||' REBUILD;'FROM USER_INDEXES;
spool off;

4.生成合并索引的脚本文件
spool /home/oracle/index_rebuild.sql
SELECT 'ALTER INDEX '||INDEX_NAME ||' coalesce;'FROM USER_INDEXES;
spool off;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值