当前位置: 首页 > 科技观察

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

时间:2023-03-20 16:01:45 科技观察

很多时候我们需要建立索引或者重建一些大表。如果操作不当容易影响生产环境,我写了这方面的一些关于数据库索引创建和索引重建变更的规范,仅供参考。一、创建索引前检查1、检查表段大小:selectsegment_name,bytes/1024/1024MBfromuser_segmentswheresegment_name='<表名>';2、查看表列中不同值的分布:selecta.table_name,a.column_name,a.num_distinct,round(a.num_distinct*100/b.num_rows)"distinctpercent%"fromuser_tab_columnsa,user_tablesbwherea.table_name=b.table_nameanda.table_name='ORDER_RELEASE_STATUS';这里可以看到不同值的分布一般占整个表的记录数,如果percent%达到15%以上可以创建索引提高效率。2、创建索引因为之前没有建立数据库规范,实际上有一张表有255个字段,50多个索引...1、创建单列索引:createindexindex_nameontable(col1)tablespacetbs_name[nologging][online][并行];alterindexindex_namenoparallel;2、创建复合索引:createindexindex_nameontable(col1,col2,…)tablespacetbs_name[nologging][online][paralleln];alterindexindex_namenoparallel;3.创建索引:createuniqueindex_nameontable(2col1,col1,,…)tablespacetbs_name[nologging][online][paralleln];alterindexindex_namenoparallel;4.创建分区索引:本地索引:小表:createindexindex_nameontable(col1)local;大表:1)createindexindex_nameontable(col1)localunusable;2)alterindexiindex_namerebuildpartitionp_name[paralleln];alterindex_namenoparallel;3)executedbms_stats.gather_index_stats(ownname=>'',indname=>'',)全局索引:create[global]indexindex_nameontable(col);5.删除创建的索引dropindex_name;Rebuild1.重建普通索引:alterindexindex_namerebuildtablespacew_data[online][paralleln][nologging];alterindexindex_namenoparallel;2.重建分区索引:alterindexindex_namerebuildpartitionpartition_nametablespacetbs_name[online][paralleln][nologging];alterindex_namenoparallel;,table_name,status,tablespace_namefromuser_indexes;status有效,说明索引状态正常2.分区索引检查selectindex_name,partition_name,status,tablespace_namefromuser_ind_partitions;status可用,说明索引状态正常。最后,建好索引之后,大家一定要注意观察数据库SQL执行计划是否OK,执行效率是否提升,进而监控应用是否正常。内容方面,感兴趣的朋友可以关注一下。