超详细的Oracle数据库索引创建及索引重建变更规范

数据库 其他数据库
很多时候我们都需要对某些大表去建索引或者重建,如果不正当操作就很有可能会影响到生产环境,针对这个方面我写了一些关于数据库索引创建及索引重建变更的规范,仅供参考。

很多时候我们都需要对某些大表去建索引或者重建,如果不正当操作就很有可能会影响到生产环境,针对这个方面我写了一些关于数据库索引创建及索引重建变更的规范,仅供参考。

一、索引创建前检查

1. 检查表段大小:

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

超详细的Oracle数据库索引创建及索引重建变更规范

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

  1. select a.table_name, 
  2.  a.column_name, 
  3.  a.num_distinct, 
  4.  round(a.num_distinct * 100 / b.num_rows) "distinct percent%" 
  5.  from user_tab_columns a, user_tables b 
  6.  where a.table_name = b.table_name 
  7.  and a.table_name = 'ORDER_RELEASE_STATUS'

超详细的Oracle数据库索引创建及索引重建变更规范

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

超详细的Oracle数据库索引创建及索引重建变更规范

二、索引创建

因为之前数据库规范没建立,居然有一张表建立了255个字段,且索引建了50多个...

超详细的Oracle数据库索引创建及索引重建变更规范

1. 创建单列索引:

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

2. 创建复合索引:

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

3. 创建索引:

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

4. 创建分区索引:

Local 索引:

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

Global 索引:

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

5. 删掉创建的索引

  1. drop index index_name; 

三、索引重建

1. 重建普通索引:

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

2. 重建分区索引:

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

四、数据库索引检查

1. 普通索引检查

  1. select index_name,table_name,status,tablespace_name from user_indexes;  

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

超详细的Oracle数据库索引创建及索引重建变更规范

2. 分区索引检查

  1. select index_name,partition_name,status,tablespace_name from user_ind_partitions;  

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

超详细的Oracle数据库索引创建及索引重建变更规范

最后提一点,大家在建索引后一定要注意观察数据库 SQL 执行计划是否 OK,执行效率是否提高,然后监控下应用是否正常,不能创建完就拍拍屁股走人,后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下。

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2011-07-27 13:22:35

检查索引碎片Oracle数据库重建索引

2011-03-16 08:54:45

Oracle数据库索引

2011-05-26 10:11:24

Oracle数据库索引

2010-11-16 09:18:39

oracle重建索引

2019-08-20 09:46:14

DBA收藏脚本语言

2022-03-24 20:44:53

数据库索引SQL

2009-06-11 13:12:59

Oracle索引创建索引

2023-12-20 12:49:05

索引数据检索数据库

2011-07-04 10:19:41

索引ONLINE

2011-07-27 11:08:49

Oracle数据库EM Console重

2020-10-26 10:20:20

数据库索引MySQL

2023-11-16 17:12:33

数据库oracle

2010-04-19 13:31:42

Oracle索引

2019-08-01 07:31:51

数据库主机日志

2010-05-10 18:54:12

Oracle数据库索引

2011-04-11 16:50:13

Oracle数据库索引

2010-04-07 17:45:22

Oracle位图索引

2010-10-26 16:33:54

创建Oracle索引

2010-04-26 14:24:58

Oracle数据库索引

2011-03-23 17:39:34

Oracle数据库索引创建
点赞
收藏

51CTO技术栈公众号