精华内容
下载资源
问答
  • oracle中重建索引

    2011-09-27 17:43:40
    原文出自:... 当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引没有更

    原文出自:http://space.itpub.net/7199859/viewspace-555288

    当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引树中没有更新操作,只有删除和插入操作。

    例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引树中的“101”标示为删除(实际并未删除,只是标示一下),然后再将“110”写到索引树中。

    如果表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以我们应该定期重建索引。来消除索引中这些删除标记。

    一般不会选择先删除索引,然后再重新创建索引,而是rebuild索引。在rebuild期间,用户还可以使用原来的索引,并且rebuild新的索引时也会利用原来的索引信息,这样重建索引会块一些。


    G:\-N'Ac%[0这个实验来察看索引中的删除标记,并且如何重建索引。

    试验环境:oracle 8.1.7

     

    一、创建表、插入记录和创建索引
    :Z4Sto'k n0SQL> create table ind (id number,name varchar2(100));

    表已创建。

    SQL> create or replace procedure sp_insert_ind
    &Z#xK!^p&qq)J0  2  isITPUB个人空间XNw0_b6J@0aZ
      3  beginITPUB个人空间J/H-N*{2H5}7S(b;_
      4  for i in 1..10000 loopITPUB个人空间(M Cn-f f
      5  insert into ind values(i,to_char(i)||'aaaaaaaaaa');ITPUB个人空间j;nk+v#x-x[F{JUs
      6  end loop;ITPUB个人空间GuC/R9K"{!S:C-E
      7  end;
    :Cu0[8e�v`.L0  8  /

    过程已创建。

    SQL> exec sp_insert_ind

    PL/SQL 过程已成功完成。

    ITPUB个人空间Kkg!m].A3jq
    SQL> create index ind_id_idx on ind(id);

    索引已创建。

     

    二、收集索引信息

    --收集信息,没有更新数据字典,所以没有信息ITPUB个人空间 \vT"a#ZP#oex
    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    未选定行


    5})YlX5K6F Y7B\oc0--更新数据字典
    _V [v9ZIS7BI0SQL> ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;

    索引已分析


    o[s?I+T0P?0--参数含义:ITPUB个人空间[7DT$T$zZMy"Ol
    --LF_ROWS Number of values currently in the index
    %\!_hW%N)lS:?8}0--LF_ROWS_LEN Sum in bytes of the length of all values
    .bD`1Q'vNF0--DEL_LF_ROWS Number of values deleted from the index
    DN2zoM`^l'U0--DEL_LF_ROWS_LEN Length of all deleted values

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

       LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN                             ITPUB个人空间*wkKJ$yv5b;M
    ---------- ----------- ----------- ---------------                             
    uY7CFY:J5Lv\O0     10000      149801           0               0     

                           
    !\A,A'{3QT7c4R7a0--察看索引中已经标示为删除的行除以总共的行的数量,目前为0ITPUB个人空间8|4Bcy ^y
    SQL> SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage  FROM index_stats;

    INDEX_USAGE                                                                    ITPUB个人空间d:G6i'C4Z:I+c%h
    -----------                                                                    
    V%v)[K,C!u0          0      

     

    三、更新索引,并且重新察看信息
    s?,a3Xx5M8D0                                                            ITPUB个人空间G4OY|5vuh
    --更新表中1000行记录,这时会更新索引树
    8N6V"G%}m4Nh*a+NT0SQL> update ind set id=id+1 where id>9000;

    已更新1000行。

    ITPUB个人空间/rk`j3kA]�|T
    SQL> ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;

    索引已分析


    Y{@A\`E#O&p0--总共行的数量增加了1000行,并且标示为删除了1000行记录ITPUB个人空间!N;f#Fav{9Bk8}
    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

       LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN                             ITPUB个人空间4|&u:z)Vt\i0n.NpW
    ---------- ----------- ----------- ---------------                             ITPUB个人空间)rXb6W|]E0A1|U
         11000      164792        1000           14990                             


    /E#\|A+S|q ~0--察看索引中已经标示为删除的行除以总共的行的数量,目前为 9.09631536,这个值如果查过20,肯定要重建索引了。
    iSW%PX/S0SQL> SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage  FROM index_stats;

    INDEX_USAGE                                                                    
    [X uU/UL0-----------                                                                    
    ]Ek)V{!])?s09.09631536                                                                    

     

    四、重建索引

    --重建索引
    VH~7~r,ON9W \0SQL> alter index ind_id_idx rebuild;

    索引已更改。

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    未选定行

     

    ---以下信息又基本回到从前
    I]bN/Y9_v-L;rt"H0SQL> ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;

    索引已分析

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

       LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN                             ITPUB个人空间%Y0q3^ecX8@&I.yW
    ---------- ----------- ----------- ---------------                             ITPUB个人空间m1E*v5K`:y9uT)`"w
         10000      149802           0               0                             

    SQL> SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage  FROM index_stats;

    INDEX_USAGE                                                                    
    y|6T],O X y&Z0-----------                                                                    ITPUB个人空间2l|@hAt3FH
              0        


    展开全文
  • 每隔一段时间,我们就需要在Oracle中重建索引,因为随着时间的推移,索引变得支离破碎。这会导致数据库查询的性能下降,进而导致数据库查询的性能下降。因此,不时地重建索引会非常有益。话虽如此,索引不应该经常...

    每隔一段时间,我们就需要在Oracle中重建索引,因为随着时间的推移,索引变得支离破碎。这会导致数据库查询的性能下降,进而导致数据库查询的性能下降。因此,不时地重建索引会非常有益。话虽如此,索引不应该经常重建,因为这是一项资源密集型任务。更糟糕的是,当重建索引时,将在索引上放置锁,从而阻止任何人在重建期间访问它。尝试访问该索引以返回所需结果的所有查询都将被暂时阻止,直到重建完成。

    在今天的文章中,我们将学习建立索引的频率以及如何确定何时需要重建索引。

    重建索引的频率

    如引言中所述,重建索引既耗费资源又是阻塞任务。这两方面的考虑使它成为脱机活动的理想选择,该活动可以在访问数据库的用户尽可能少的情况下运行。通常,这意味着在计划的维护时段内。

    制定关于何时以及多长时间重建索引的全面计划实际上是不可行的。这些决定在很大程度上取决于您使用的数据类型以及所使用的索引和查询。考虑到这一点,这里有一些有关何时重建索引的准则:

    每晚重建索引

    如果索引迅速碎片化,并且您有一个夜间维护窗口,除所有其他维护任务之外,该窗口还允许您运行“重建索引”任务,那么请务必继续。

    每周至少执行一次

    如果您不能每晚重建索引,则应至少每周执行一次。如果等待时间超过一周,则由于浪费的空白空间和逻辑碎片而产生的负面影响,可能会损害SQL Server的性能。

    选择调度

    如果没有维护窗口至少每周一次执行此任务,那么您需要密切注意索引的运行情况。

    确定是否需要重建索引

    在Oracle中,您可以使用ANALYZE INDEX VALIDATE STRUCTURE命令来了解索引的当前状态。以下是INDEX_STATS表的一些示例输出:

    4ffbd6d3006f468e23fe44c7188a253e.png

    有两个经验法则可以帮助确定是否需要重建索引:

    如果索引的高度大于四,则重建索引。

    删除的叶行应少于20%。

    重建索引

    在Oracle中,您可以使用Alter Index Rebuild命令来重建索引。它重建空间索引或分区索引的指定分区。

    ALTER INDEX REBUILD命令具有以下几种形式:

    e0a66d574ee07253a23fb0c90831999d.png

    4099c392eeab606f4a164dee07a3ac6e.png

    12c88d5d823fb94ba04a4f78e05c5022.png

    处理无法使用的索引

    Navicat for Oracle的维护索引工具提供了两个有用的选项来处理无法使用的索引:

    重建

    重新创建现有索引或其分区或子分区之一。如果索引标记为不可用,则重建成功将标记为可用。

    使索引不可用

    使索引不可用。在使用无法使用的索引之前,必须对其进行重建、删除或重新创建。

    结论

    在今天的文章中,我们了解了建立索引的频率以及如何确定何时需要重建索引。您可以

    相关内容推荐:

    想要购买产品正版授权,或了解更多产品信息请点击

    711ed1a543bee765ea1e8c4b61962754.png

    标签:

    f0a36711cb266f2a250316798aab13ae.png0

    好文不易,鼓励一下吧!

    展开全文
  • 每隔一段时间,我们就需要在Oracle中重建索引,因为随着时间的推移,索引变得支离破碎。这会导致其性能(以及扩展)导致数据库查询的性能下降。因此,不时地重建索引会非常有益。话虽如此,索引不应该经常重建,因为这...

    每隔一段时间,我们就需要在Oracle中重建索引,因为随着时间的推移,索引变得支离破碎。这会导致其性能(以及扩展)导致数据库查询的性能下降。因此,不时地重建索引会非常有益。话虽如此,索引不应该经常重建,因为这是一项资源密集型任务。更糟糕的是,当重建索引时,锁将被放置在索引上,从而阻止任何人在重建期间访问它。任何尝试访问此索引以返回所需结果的查询都将被暂时阻止,直到重建完成。

    在今天的文章中,我们将学习建立索引的频率以及如何确定何时需要重建索引。

    重建索引的频率

    如引言中所述,重建索引既耗费资源又是阻塞任务。这两方面的考虑使它成为脱机活动的理想选择,当要访问尽可能少的用户访问数据库时就可以运行它。通常,这意味着在计划的维护时段内。

    制定关于何时以及多长时间重建索引的全面计划实际上是不可行的。这些决定在很大程度上取决于您使用的数据类型以及所使用的索引和查询。考虑到这一点,这里有一些有关何时重建索引的准则:

    每晚重建索引

    如果索引迅速碎片化,并且您有一个夜间维护窗口,除所有其他维护任务外,它还允许您运行“重建索引”任务,那么请务必继续。

    每周至少

    如果您无法每晚重建索引,则应至少每周执行一次。如果等待时间超过一周,则由于浪费的空白空间和逻辑碎片而带来的负面影响,就有可能损害SQL Server的性能。

    替代排程

    如果没有维护窗口至少每周一次执行此任务,那么您需要密切注意索引的运行情况。

    确定是否需要重建索引

    在Oracle中,您可以使用ANALYZE INDEX VALIDATE STRUCTURE命令来了解索引的当前状态。

    有两个经验法则可以帮助确定是否需要重建索引:

    如果索引的高度大于四,则重建索引。

    删除的叶行应少于20%。

    重建索引

    在Oracle中,您可以使用Alter Index Rebuild命令来重建索引。它重建空间索引或分区索引的指定分区。

    ALTER INDEX REBUILD命令具有以下几种形式:

    ALTER INDEX [schema.]index REBUILD

    [PARAMETERS ('rebuild_params [physical_storage_params]' ) ]

    [{ NOPARALLEL | PARALLEL [ integer ] }] ;

    或者:

    ALTER INDEX [schema.]index REBUILD ONLINE

    [PARAMETERS ('rebuild_params [physical_storage_params]' ) ]

    [{ NOPARALLEL | PARALLEL [ integer ] }] ;

    或者:

    ALTER INDEX [schema.]index REBUILD PARTITION partition

    [PARAMETERS ('rebuild_params [physical_storage_params]' ) ];

    处理无法使用的索引

    重建

    使无法使用

    结论

    重新创建现有索引或其分区或子分区之一。如果索引标记为不可用,则重建成功将标记为可用。

    使索引不可用。在使用无法使用的索引之前,必须对其进行重建,删除或重新创建。

    在今天的博客中,我们了解了建立索引的频率以及如何确定何时需要重建索引。

    如果您想购买Navicat for Oracle的正版授权,欢迎。

    标签:

    本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

    展开全文
  • 浅谈oracle中重建索引

    2011-12-28 11:09:30
    索引操作的完整,特别对于索引的相关验证介绍非常实用,在重建索引时可以提供给使用者完整的操作方法。
  • 浅谈oracle中重建索引当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引树没有更新操作,只有删除和插入操作。...

    浅谈oracle中重建索引

    当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引树中没有更新操作,只有删除和插入操作。

    例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引树中的“101”标示为删除(实际并未删除,只是标示一下),然后再将“110”写到索引树中。

    如果表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以我们应该定期重建索引。来消除索引中这些删除标记。

    一般不会选择先删除索引,然后再重新创建索引,而是rebuild索引。在rebuild期间,用户还可以使用原来的索引,并且rebuild新的索引时也会利用原来的索引信息,这样重建索引会块一些。

    这个实验来察看索引中的删除标记,并且如何重建索引。

    试验环境:oracle 8.1.7

    一、创建表、插入记录和创建索引

    SQL> create table ind (id number,name varchar2(100));

    表已创建。

    SQL> create or replace procedure sp_insert_ind

    2  is

    3  begin

    4  for i in 1..10000 loop

    5  insert into ind values(i,to_char(i)||'aaaaaaaaaa');

    6  end loop;

    7  end;

    8  /

    过程已创建。

    SQL> exec sp_insert_ind

    PL/SQL 过程已成功完成。

    SQL> create index ind_id_idx on ind(id);

    索引已创建。

    二、收集索引信息

    --收集信息,没有更新数据字典,所以没有信息

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    未选定行

    --更新数据字典

    SQL> ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;

    索引已分析

    --参数含义:

    --LF_ROWS Number of values currently in the index

    --LF_ROWS_LEN Sum in bytes of the length of all values

    --DEL_LF_ROWS Number of values deleted from the index

    --DEL_LF_ROWS_LEN Length of all deleted values

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN

    ---------- ----------- ----------- ---------------

    10000      149801           0               0

    --察看索引中已经标示为删除的行除以总共的行的数量,目前为0

    SQL> SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage  FROM index_stats;

    INDEX_USAGE

    -----------

    0

    三、更新索引,并且重新察看信息

    --更新表中1000行记录,这时会更新索引树

    SQL> update ind set id=id+1 where id>9000;

    已更新1000行。

    SQL> ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;

    索引已分析

    --总共行的数量增加了1000行,并且标示为删除了1000行记录

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN

    ---------- ----------- ----------- ---------------

    11000      164792        1000           14990

    --察看索引中已经标示为删除的行除以总共的行的数量,目前为 9.09631536,这个值如果查过20,肯定要重建索引了。

    SQL> SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage  FROM index_stats;

    INDEX_USAGE

    -----------

    9.09631536

    四、重建索引

    --重建索引

    SQL> alter index ind_id_idx rebuild;

    索引已更改。

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    未选定行

    ---以下信息又基本回到从前

    SQL> ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;

    索引已分析

    SQL> select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;

    LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN

    ---------- ----------- ----------- ---------------

    10000      149802           0               0

    SQL> SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage  FROM index_stats;

    INDEX_USAGE

    -----------

    0

    展开全文
  • 当我们创建索引时,oracle会为...例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引的“101”标示为删除(实际并未删除,只是标示一
  • 解决办法: 如果出现这个警告,说明表空间空间不够了,应向表空间添加数据文件或者增大表空间已有的数据文件大小. ...无法为表空间YXKFILE的段创建 INITIAL 扩展块 如何解决??大侠救命!! sql> create table
  • 解决办法:如果出现这个警告,说明表空间空间不够了,应向表空间添加数据文件...更详细的:无法为表空间YXKFILE的段创建 INITIAL 扩展块 如何解决??大侠救命!!sql> create table tempb as select * from txlxb; cre
  • 当索引的碎片过多时 会影响执行查询的速度 从而影响到我们的工作效率 这时候采取的最有利的措施莫过于重建索引了 本文主要介绍了Oracle数据库检查索引碎片并重建索引的过程 接下来我们就开始介绍这一过程重建索引...
  • 主要介绍了Oracle关于重建索引争论的总结,本文总结了重建索引的理由、重建索引的本质、反对重建索引的理由等内容,需要的朋友可以参考下
  • 本文主要介绍了Oracle数据库检查索引碎片并重建索引的过程,接下来我们就开始介绍这一过程。 重建索引的步骤如下: 1. 确认基本信息 登当索引的碎片过多时,会影响执行查询的速度,从而影响到我们的工作效率。这...
  • 当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引。近来Oracle也提出了...
  • Oracle重建索引

    2018-01-10 20:29:38
    索引重建:rebuild 方法一:(先删除后新建) DROP index ZEMESSAGE_BOX; create index ZEMESSAGE_BOX on ZEMESSAGE (BOX);   方法二: alter index ZEMESSAGE_PLATFORM rebuild
  • ORACLE数据库重建索引

    2013-09-29 11:06:27
    导致索引失效: 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。
  • Oracle ~ 重建索引(包括分区)尽量不要重建索引真正需要重建索引的情形如何重建索引1、drop 原来的索引,然后再创建索引2 、直接重建2.1 alter index rebuild 和alter index rebuil online的区别注意点:重建分区表...
  • Oracle批量重建索引

    2009-09-09 15:11:00
    --oracle 批量重建索引 create or replace procedure p_rebuild_all_index (tablespace_name in varchar2)as sqlt varchar(200);begin for idx in (select index_name, tablespace_name, status from user_indexe
  • oracle 重建索引初学者oracle6-oracle 重建索引www.myexceptions.net网友分享于:2013-07-23浏览:3次菜鸟oracle6--oracle 重建索引转自:http://database.51cto.com/art/201011/233500.htm 谢谢Oracle重建索引操作...
  • oracle重建索引

    2016-02-17 15:24:39
    一:考虑重建索引的场合 1:表上频繁发生update,delete操作 2:表上发生了alter table ..move操作(move操作导致了rowid变化) 二:判断重建索引的标准  索引重建是否有必要,一般看索引是否倾斜的严重...
  • oracle 重建索引 回收表空间 《PS:留下小赞赞,比心比心》 BEGIN /*################## 收缩表的空余存储空间 把查询出的sql按顺序执行即可 ####################*/ FOR i IN (select 'alter ...
  • 为了方便广大考生更好的复习,帮考网综合整理提供了Oracle认证:Oracle创建/重建和删除索引,以供各位考生考试复习参考,希望对考生复习有所帮助。Oracle创建、重建和删除索引创建索引:SQL》 create index mcconf_...
  • ORACLE重建索引

    万次阅读 2018-04-23 18:42:27
    重建索引 alter index 索引名称 rebuild tablespace DELL_SPACE online; 索引分析 analyze index 索引名称 validate structure; select (del_lf_rows_len/lf_rows_len) from index_stats where name='索引名称';
  • oracle 索引修复 Oracle索引重建

    千次阅读 2018-08-15 21:34:26
    当数据库出现坏块而坏块所涉及对象为索引时,我们一般进行修复索引的方法是重建索引。 相对其它坏块,索引坏块修复起来最容易的。不过在修复前,我们需要确认这个坏块确实来自于某索引。 因此,这里我们会介绍一些...
  • ORACLE重建索引总结

    2011-12-13 10:32:28
    3、以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点 的数量,要记住oracle在删除数据行后,将 “ 死 “ 节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必...
  • 主要介绍了Oracle重建索引Shell脚本、SQL脚本分享,索引是提高数据库查询性能的有力武器,定期重建索引是很有必要的事情,需要的朋友可以参考下
  • ORACLE重建索引详解

    2018-11-07 14:52:53
    一、重建索引的前提 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。   二、重建索引的标准 1、索引重建是否有必要,一般看索引是否倾斜的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,229
精华内容 12,091
关键字:

oracle中重建索引