ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 索引块分裂流程的研究

索引块分裂流程的研究

原创 Linux操作系统 作者:红叶DBA 时间:2013-01-25 23:43:41 0 删除 编辑

对于索引块的分裂,虽然早有了解,但一直没有经过试验验证。
今天总算是验证了一把。

以下为验证过程:

1、创建测试表与索引
DROP TABLE T PURGE;
CREATE TABLE T(C VARCHAR2(1000));
CREATE INDEX IDX_T_C ON T(C);

2、查看索引存储的Extents,后期dump用
SELECT FILE_ID, BLOCK_ID, BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='IDX_T_C';

3、未插入数据之前,dump索引extent数据

4、由于db_block_size=8192,而索引字段大小为1000,故此大约可以存储7条记录。
所以本步我们先插入7条记录,依次为 111 ~ 117

5、dump插入数据之后的索引extent

6、插入记录118,并dump索引extent

7、插入数据119~125,并dump索引extent

8、插入数据 126,并dump索引extent

9、插入数据110,并dump索引extent

10、插入数据122,并dump索引extent

11、一步步得出索引变化图,对比分析索引分裂的原理:

90-10分裂:
产生的条件:
1、插入的行需要记录到本索引块
2、本索引块中没有足够空间
3、新插入的行大于本索引块中的所有记录。
分裂的过程:
1、申请一个新索引块
2、将所有原索引块中的数据保留在原索引块中
3、将新的行记录插入到新申请的索引块中
4、更新上级索引块(Branch Block)

50-50分裂:
产生的条件:
1、插入的行需要记录到本索引块
2、而本索引块中没有足够空间
3、且新插入的行不大于本索引中的所有记录。
分裂过程:
1、新申请一个新的索引块
2、将原索引块中较大的部分数据转移到新索引块中
3、将新值插入合适的索引块中
4、更新上级索引块(Branch Block)


索引块内容变化图:

-- to be continued --

index_split .jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24465008/viewspace-753356/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 搭建物理备库
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    71091