关于查看索引所占空间及rebuild对索引的影响
(2010-12-22 16:17:40)
标签:
rebuildindexit |
分类: Oracle数据库 |
测试目的:
查看索引所占表空间及rebuild对索引重建后所占空间的比较
测试表:
测试索引:
测试步骤:
a)
select t.segment_name "索引名称", bytes/1024/1024 "占用空间(M)" from user_segments t where t.segment_type='INDEX'
1
2
3
4
5
6
7
8
9
其中,PK_STUDENT与该测试无关
b)
原因分析:数据库对象使用的段有一个HWL(高水位线),当对象使用空间增加时,HWL移动到高位,而当对象使用空间减小时,HWL并不会主动降低。这种情况就造成使用索引查询记录时,需要扫描过多的无用数据块。
c)
alter index IDX_INVOICEINFO rebuild;
d)
1
2
3
4
5
6
7
8
9
标红的索引表空间IDX_INVOICEINFO并没有变化,说明rebuild对本次操作作用不明显。
e)
drop index IDX_INVOICEINFO;
create index IDX_INVOICEINFO on INVOICEINFO (ENTERPRISEID, INVOICEKIND, INVOICENUMBER, YYBZ);
因为表中记录较少,操作秒级完成。此时我们再观察索引统计信息:
select t.segment_name "索引名称", bytes/1024/1024 "占用空间(M)" from user_segments t where t.segment_type='INDEX';
1
2
3
4
5
6
7
8
9
可以发现,索引IDX_INVOICEINFO所占空间显著缩小。
f)
首先需要明确的是,rebuild是对索引进行扫描,而rebuild online是对表进行扫描。在DML操作频繁的OLTP系统中经常用rebuild online会比较合适。
alter index IDX_INVOICEINFO_3 rebuild online;
此时查询空间占用情况:
select t.segment_name "索引名称", bytes/1024/1024 "占用空间(M)" from user_segments t where t.segment_type='INDEX';
1
2
3
4
5
6
7
8
9
可以发现,索引IDX_INVOICEINFO_3所占空间没有显著变化。
结论:
rebuild索引并不能降低高水位线,先drop再create才可以达到此目的。