- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈oracle中重建索引(ZT)
当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引树中没有更新操作,只有删除和插入操作。
例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引树中的“101”标示为删除(实际并未删除,只是标示一下),然后再将“110”写到索引树中。
如果表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以我们应该定期重建索引。来消除索引中这些删除标记。
一般不会选择先删除索引,然后再重新创建索引,而是rebuild索引。在rebuild期间,用户还可以使用原来的索引,并且rebuild新的索引时也会利用原来的索引信息,这样重建索引会块一些。
}r8e7{7~m0这个实验来察看索引中的删除标记,并且如何重建索引。
试验环境:oracle 8.1.7
?
一、创建表、插入记录和创建索引ITPUB个人空间G d@K*C)e0JSQL create table ind (id number,name varchar2(100));
表已创建。
SQL create or replace procedure sp_insert_ind4LJ.U9Z Z.lq0? 2? isSh#g+w%qnJ,z0? 3? beginITPUB个人空间lK H Uu}? 4? for i in 1..10000 loop)b1l.UQa%oamE0? 5? insert into ind values(i,to_char(i)||aaaaaaaaaa);ITPUB个人空间+?q ^nQ%B T? 6? end loop;}g9E3Z_ C0? 7? end;B(@~;aY @;T~Tz0? 8? /
过程已创建。
SQL exec sp_insert_ind
PL/SQL 过程已成功完成。
]5\8F$[kJYa0SQL create index ind_id_idx on ind(id);
索引已创建。
?
二、收集索引信息
--收集信息,没有更新数据字典,所以没有信息LpR2{7O{#}~0SQL select lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len from index_stats;
未选定行
ITPUB个人空间2b/JE6o\,SM.Y`--更新数据字典HYiY~0SQL ANALYZE INDEX ind_id_idx VALIDATE STRUCTURE;
索引已分析
ITPUB个人空间#Nv^wP9}--参数含义:ITPUB个人空间/KAJ{+g--LF_ROWS Number of values currently in the indexITPUB个人空间;E.h h%wyj P-?--LF_ROWS_LEN Sum in bytes of the length of all valuesl G-AY*}0--DEL_LF_ROWS Number of values deleted from the indexv7Gr#s-kqe0--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?????????????????????????????W1~4V5i/LO!qti0---------- ----------- ----------- ---------------?????????????????????????????Wep0j q0???? 10000????? 149801?????????? 0?????????????? 0?????
???????????????????????ITPUB个人空间+i-F}X Z,`4Au5Y--察看索引中已经标示为删除的行除以总共的行的数量,目前为0Xo6Z$l:Y2h0SQL SELECT (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage? FROM index_stats;
INDEX_USAGE???
文档评论(0)