B_TREE索引原理初解


1、读取表中数据并对其进行排序,如果排序的内存超过设定,则使用临时表空间。
2、开始把(1处)的排序结果存储在索引段的叶块中,在存储空间到达索引块的pctfree之前,该页块同时担任分支块的重任。
3、当到达pctree,需要获得新的块(2处)用来存储索引行。同时生成一个分支块。在该分支块的头部存储着现有叶块的DBA(data block address),新的叶块中开始键值和它的DBA一起构成分支块的一行数据。

分支块中存储以下信息:
1、最小的键值前缀,用于在(本块的)两个键值之间做出分支选择。
2、指向包含所查找键值的子块的指针。
包含 n 个键值的分支块含有 n+1 个指针。键值及指针的数量同时还受索引块容量的限制。
所有叶块相对于其根分支块的深度是相同的。
叶块用于存储以下信息:
1、数据行的键值(key value) 。
2、键值对应数据行的 ROWID 。

4、按照这样的方法联系不断的向叶块中插入数据,当叶块被填满的时候就分配新的叶块,该叶块的开始键值和DBA作为分支块的一行数据被存储。当分支块使用的空间到达pctree,就行再分配新的分支块(3处)。类型(2处)的操作,在分配的分支块的头部记录分支块的最左边块(left most child block)信息。
5、由于叶块中的数据不断插入,不仅分支块的行数在不断增加,而且分支块的数据也在不断增加。为了记录这些下层分支块信息。就需要分配一个上层分支块。由于该分支块处于最上层。所以就是根块。类似于(2处)操作,最左边分支块的信息被存储在根块的头部。
6、按照这样的方法,当分配新的分支块的时候,该分支块的开始键值和他的DBA作为一行数据被记录在根块中,如果根块被填满,则需要分配新的块,由于这样新分配的块处于最上层,故它变成了根块。

提高页块的数据存储密度的方法:
1、在允许的情况下、尽量减少索引列的数量。
2、尽量使用较大的数据块(DB_block_size)
3、设置最小的pctfree
4、灵活压缩键值。在非唯一索引的情况下,大部分键值会被重复存储。为避免此类情况

create index ord_idx on orders(row1,row2) compress 1;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值