电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

ORACLE数据库:如何重建索引。

来源:金蝶云社区作者:金蝶2024-09-232

ORACLE数据库:如何重建索引。

【问题描述】

  大部分情况下,ORACLE数据库的索引,并不需要人为干预,但若表在短时间内大幅删除数据,致使表出现大量的空块,可以考虑重建其索引,



【解决方案】

1  使用SQLPLUS工具(建议),以业务账号身份登录,建辅助表:


CREATE TABLE USER_INDEX_STATS

(ANALYZED_DATE                      DATE DEFAULT SYSDATE,

 REBUILD_DATE                       DATE,

 TABLE_NAME                         VARCHAR2(30), 

 INDEX_NAME                         VARCHAR2(30),

 HEIGHT                             NUMBER,

 BLOCKS                             NUMBER,

 PARTITION_NAME                     VARCHAR2(30),

 LF_ROWS                            NUMBER,

 LF_BLKS                            NUMBER,

 LF_ROWS_LEN                        NUMBER,

 LF_BLK_LEN                         NUMBER,

 BR_ROWS                            NUMBER,

 BR_BLKS                            NUMBER,

 BR_ROWS_LEN                        NUMBER,

 BR_BLK_LEN                         NUMBER,

 DEL_LF_ROWS                        NUMBER,

 DEL_LF_ROWS_LEN                    NUMBER,

 DISTINCT_KEYS                      NUMBER,

 MOST_REPEATED_KEY                  NUMBER,

 BTREE_SPACE                        NUMBER,

 USED_SPACE                         NUMBER,

 PCT_USED                           NUMBER,

 ROWS_PER_KEY                       NUMBER,

 BLKS_GETS_PER_ACCESS               NUMBER,

 PRE_ROWS                           NUMBER,

 PRE_ROWS_LEN                       NUMBER,

 OPT_CMPR_COUNT                     NUMBER,

 OPT_CMPR_PCTSAVE                   NUMBER,

 COMMENTS                           VARCHAR2(300))

/

2  执行下面分析、重建索引的脚本,


set serverout on;

declare

  v_sql          varchar2(300);

  v_Errmsg       varchar2(300);

begin

  delete from user_index_stats;

  commit;

  for i in (select table_name, index_name, num_rows from user_indexes where index_type like '%NORMAL%' and partitioned='NO' 

            and not (regexp_like(table_name,'^TMP[[:alnum:]]{27}$')) and temporary='N' and num_rows > 0 order by 3 desc) loop

    begin

      v_sql := 'analyze index '||i.index_name||' validate structure ';

      execute immediate v_sql;

      insert into user_index_stats(table_name, height, blocks, index_name, partition_name, 

                                   lf_rows, lf_blks, lf_rows_len, lf_blk_len, br_rows, br_blks,

                                   br_rows_len, br_blk_len, del_lf_rows, del_lf_rows_len, distinct_keys, 

                                   most_repeated_key, btree_space, used_space, pct_used, rows_per_key, blks_gets_per_access, 

                                   pre_rows, pre_rows_len, opt_cmpr_count, opt_cmpr_pctsave)

      select i.table_name, height, blocks, name, partition_name, 

             lf_rows, lf_blks, lf_rows_len, lf_blk_len, br_rows, br_blks,

             br_rows_len, br_blk_len, del_lf_rows, del_lf_rows_len, distinct_

ORACLE数据库:如何重建索引。

【问题描述】 大部分情况下,ORACLE数据库的索引,并不需要人为干预,但若表在短时间内大幅删除数据,致使表出现大量的空块,可以考虑重...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信