Oracle数据库索引创建及索引重建变更规范

概述

作为DBA,针对数据库索引创建及重建需要了解一下索引创建的原则及标准,判断是否需要停止应用以及检查创建索引的表大小,选择合适的创建方式。

一、索引创建前的检查

1、检查表段大小

select segment_name, bytes/1024/1024 MB from user_segments  where segment_name='<表名>';

2、检查表列不同值分布情况

select a.table_name,
       a.column_name,
       a.num_distinct,
       round(a.num_distinct * 100 / b.num_rows) "distinct percent%"
  from user_tab_columns a, user_tables b
 where a.table_name = b.table_name
   and a.table_name = 'ORDER_RELEASE_STATUS';

在这里插入图片描述
这里可以看到一般不同值分布占全表记录数,如果percent%达到15%以上就可以建立索引提高效率
在这里插入图片描述

二、数据库索引创建实施过程

1、创建单列索引

create index index_name on table(col1) tablespace tbs_name [nologging] [online] [parallel n];
alter index index_name noparallel ;

2、创建复合索引

create index index_name on table(col1,col2,…) tablespace tbs_name [nologging] [online][parallel n];
alter index index_name noparallel ;

3、创建唯一索引

create unique index index_name on table(col1,col2,…) tablespace tbs_name [nologging][online][parallel n];
alter index index_name noparallel ;

4、创建分区索引

4.1、Local 索引

小表:
create index index_name on table(col1) local;
大表:
1)create index index_name on table(col1) local unusable;
2)alter index index_name rebuild partition p_name [parallel n];
alter index index_name noparallel ;
3)execute dbms_stats.gather_index_stats(ownname=> '',indname=> '',)

4.2、Global 索引

create [global] index index_name on table(col);

5、删掉创建的索引

drop index index_name;

三、数据库索引重建实施过程

1、重建普通索引

alter index index_name rebuild tablespace w_data [online][ parallel n][ nologging]; 
alter index index_name noparallel ;

2、重建分区索引

alter index index_name rebuild partition partition_name tablespace tbs_name[online][parallel n][nologging];
alter index index_name noparallel ;

四、数据库索引检查

1、检查索引状态

1.1、普通索引检查

status 为 valid 表示索引状态正常。

select index_name,table_name,status,tablespace_name from user_indexes; 

1.2、分区索引检查

status 为 usable 表示索引状态正常。

select index_name,partition_name,status,tablespace_name from user_ind_partitions; 

2、检查应用

检查相应的 SQL 效率是否提高,重点分析执行计划是否改善。

3、检查内存和历史视图

select object_name from v$sql_plan where object_name = 'index_name' ;
select object_name from dba_hist_sql_plan where object_name = 'index_name';

总结

最后,在建索引后一定要注意观察数据库 SQL 执行计划是否 OK,执行效率是否提高,然后监控下应用是否正常。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定波007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值