[201112114]index leaf node 50-50 split

index leaf node  50-50 split

[201112114]index leaf node  50-50 split.txt

当索引leaf满分裂时,存在两种情况:
1.如果插入的键值是最大值,分裂按照90-10 split.
2.如果不是,按照50-50分裂。

如何大量出现50-50的分裂呢?实际上的测试的例子很简单,如果先插入一个异常大的键值,插入键值是线性增加的,就可以模拟大量50-50的分裂然后如下:

1.建立测试表:

select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

create table t1(a varchar2(5),b varchar2(10));
create unique index i_t1_a on t1(a);

2.插入一个异常数值:

insert into t1 values ('99999','test');
commit;
--插入一个异常大的数值。

3.继续添加数据:

select a.*,b.name from v$mystat a , v$statname b where a.statistic#=b.statistic# and b.name like '%leaf%';

       SID STATISTIC#      VALUE NAME
---------- ---------- ---------- ----------------------------------------------------------------
        11        382          0 leaf node splits
        11        383          0 leaf node 90-10 splits

begin
        for i in 1..10000   loop
                insert into t1 values (lpad(to_char(i),5,'0') ,'test');
        end loop;
end;
/
commit;

select a.*,b.name from v$mystat a , v$statname b where a.statistic#=b.statistic# and b.name like '%leaf%';

SQL> select a.*,b.name from v$mystat a , v$statname b where a.statistic#=b.statistic# and b.name like '%leaf%';

       SID STATISTIC#      VALUE NAME
---------- ---------- ---------- ----------------------------------------------------------------
        11        382         39 leaf node splits
        11        383          0 leaf node 90-10 splits

可以发现索引节点分裂39次,而leaf node 90-10 splits=0次。

4.分析索引结构:
SQL> analyze index i_t1_a validate structure;

set linesize 200;
set linesize 200;
column name format a10
select HEIGHT, BLOCKS, NAME, LF_ROWS, LF_BLKS, LF_ROWS_LEN, LF_BLK_LEN, BR_ROWS, BR_BLKS, BR_ROWS_LEN, BR_BLK_LEN, DEL_LF_ROWS, DEL_LF_ROWS_LEN, DISTINCT_KEYS from index_stats;
select MOST_REPEATED_KEY, BTREE_SPACE, USED_SPACE, PCT_USED, ROWS_PER_KEY, BLKS_GETS_PER_ACCESS, PRE_ROWS, PRE_ROWS_LEN, OPT_CMPR_COUNT, OPT_CMPR_PCTSAVE from index_stats;

    HEIGHT     BLOCKS NAME          LF_ROWS    LF_BLKS LF_ROWS_LEN LF_BLK_LEN    BR_ROWS    BR_BLKS BR_ROWS_LEN BR_BLK_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN DISTINCT_KEYS
---------- ---------- ---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ----------- --------------- -------------
         2         48 I_T1_A          10001         40      160016       7996         39          1         401       8028           0               0         10001

MOST_REPEATED_KEY BTREE_SPACE USED_SPACE   PCT_USED ROWS_PER_KEY BLKS_GETS_PER_ACCESS   PRE_ROWS PRE_ROWS_LEN OPT_CMPR_COUNT OPT_CMPR_PCTSAVE
----------------- ----------- ---------- ---------- ------------ -------------------- ---------- ------------ -------------- ----------------
                1      327868     160417         49            1                    3          0            0              0                0

可以发现PCT_USED=49,索引空间的利用率很低。

可以说明如果应用中某个索引键值正常业务时是线性增加的,比如顺序号,或者日期等,如果表中存在某个异常数值,这样索引空间的利用率会很低,因为由于插入数据的索引键值都是正常业务的"最大值",每次插入都是在索引一端,而每次都比异常数值小,这样索引的分裂都是50-50的情况。

这种情况最容易出现一些日期字段,因为如果应用业务的操作人员不小心输入错误,输入2032年等等情况,而这些垃圾数据没有清除,这样很容易出现这种情况.如果索引重整,不消除这些垃圾数据,以后的情况依旧大部分是50-50分裂。

时间: 2024-10-27 04:22:01

[201112114]index leaf node 50-50 split的相关文章

理解index leaf node 90-10 split

理解index leaf node  90-10 split 当索引leaf满分裂时,存在两种情况:1.如果插入的键值是最大值,分裂按照90-10 split.2.如果不是,按照50-50分裂. 按照字面的理解90-10 split,就是90的键值保留在原来数据块中,其他10%键值使用新的数据块.实际情况如何呢? 1.建立测试表:select * from v$version;BANNER------------------------------------------------------

TokuMX, MongoDB and InnoDB versus the insert benchmark with disks

I used the insert benchmark on servers that use disks in my quest to learn more about MongoDB internals. The insert benchmark is interesting for a few reasons. First while inserting a lot of data isn't something I do all of the time it is something f

数据结构 关于B树说明及插入和分裂

注意:本文是我学习的一点总结,具体的代码并没有经过调试,是通过算法导论B树中的描述写成,但是增加了关于数据的链表,而不是 如算法导论中的一个数组,留于此用于以后的继续深入学习. B树的定义和特点: B树的阶实际上就是指向子树的最大指针个数 比如2-3树阶为3,2-3-4树阶为4 B树已经不是常规的树结构,多用于文件系统管理,每个节点可以有多个指向 孩子的指针,特点如下: 1.根要么为空树,要么至少有2个子树 2.假设M阶的B树,n个指向子树的指针    则:    Ceil(M/2)<=n<=

Oracle索引分裂(Index Block Split)

Oracle索引分裂(Index Block Split) 索引分裂:index  block split : 就是索引块的分裂,当一次DML 事务操作修改了索引块上的数据,但是旧有的索引块没有足够的空间去容纳新修改的数据,那么将分裂出一个新的索引块,旧有块的部分数据放到新开辟的索引块上去. 分裂的类型:根节点分裂,分支节点分裂,叶节点分裂(最频繁发生,对性能影响最直接) 按照数据迁移量的比例,将索引分裂分为两种类型:9-1分裂和5-5分裂. 9-1分裂:绝大部分数据还保留在旧有节点上,仅有非常

全球笔记本销量全年将各占50%

4月8日消息,据国外媒体报道称,上网本厂商内部消息人士表示,今年下半年全球笔记本发货量不会像前几年那样较上半年有大幅增长.下半年通常是欧洲和北美笔记本市场的旺季. 去年上半年占全球笔记本发货量的40%,下半年占60%.由于中国笔记本需求强劲,今年上半年和下半年将各占50%.上半年通常是中国PC市场需求旺季,因为有春节和五·一 国际劳动节长假. 上述消息人士称,由于中国目前占全球笔记本发货量的25%,而且未来2-3年将继续增长并超过欧洲和北美市场,全球笔记本市场将呈现上半年和下半年平分秋色的局面.

大摩将携程评级调至增持 目标价调低至50.5美元

摘要: 查看最新行情 北京时间2月13日晚间消息, 摩根士丹利 今日发布投资报告,将 携程 股票(Nasdaq: CTRP )评级从持股观望调高至增持,但将目标股价从55美元调低至50.50美元. 以下为文章内容  查看最新行情 北京时间2月13日晚间消息,摩根士丹利今日发布投资报告,将携程股票(Nasdaq: CTRP )评级从"持股观望"调高至"增持",但将目标股价从55美元调低至50.50美元. 以下为文章内容摘要: 携程的大力度投资带来了短期利润率压力,但我

9i index bug.txt 之2

9i index bug.txt 之2 1.接着以上的测试: SQL> SELECT object_id FROM dba_objects WHERE object_name = 'I_T1_A'; OBJECT_ID----------     45851         To then do a treedump of the index: SQL> ALTER SESSION SET EVENTS 'immediate trace name treedump level 45851';S

【oracle】index的几种扫描方式

常见的index 相关的扫描方式大概有如下几种: index range scan(索引范围扫描): 1.对于unique index来说,如果where 条件后面出现了<,> ,between ...and...的时候,那么就可能执行index range scan,如果where条件后面是=,那么就会执行index unique scan. 2.对于none unique index来说 如果where 条件后面出现了=,>,<,betweed...and...的时候,就有可能

oracle 9i index bug?

9i index bug.txt 1.建立表以及索引SQL> select * from v$version ;BANNER----------------------------------------------------------------Oracle9i Enterprise Edition Release 9.2.0.8.0 - ProductionPL/SQL Release 9.2.0.8.0 - ProductionCORE    9.2.0.8.0       Produ