计算机二级DELPHI技巧:位图索引使用方法详细
来源:优易学  2011-12-10 18:15:46   【优易学:中国教育考试门户网】   资料下载   IT书店


  但是,下次再插入一行相同键值的数据时,会自动合并这8行位图为一行位图,并生成一个新的索引位图行存放刚插入行的索引:
  SQL> Insert Into H病人挂号记录(Id,No,号别,执行人) Values(1,\'G000001\',1,\'张1\');
  1 row inserted
  SQL> commit;
  Commit complete
  SQL> alter system dump datafile 1 block 40028;
  System altered
  row#0[7847] flag: -----, lock: 2
  col 0; len 3; (3): d5 c5 31
  col 1; len 6; (6): 00 40 9c 54 00 00
  col 2; len 6; (6): 00 40 9c 54 00 07
  col 3; len 2; (2): c8 ff
  row#1[7825] flag: -----, lock: 2
  col 0; len 3; (3): d5 c5 31
  col 1; len 6; (6): 00 40 9c 54 00 08
  col 2; len 6; (6): 00 40 9c 54 00 0f
  col 3; len 1; (1): 00
  ----- end of leaf block dump -----

  b.数据每行提交方式,与上面的情况相似,但有一点不一样,每提交一行,拷贝原来的位图,生成新的位图,并标记原来的位图为已删除,
  标记为已删除的位图,只有索引块需要分配新的位图时,才会清除标记为已删除的位图,重用这些空间.
  在8i,9i上实验的结果,与ITPUB的<Oracle 数据库性能优化>一书378页一致.
  如果1000条相同键值的数据插入,将生成125个包括8条记录的位图行.
  c.第三种方式,批量插入数据,insert into H病人挂号记录(Id,No,号别,执行人) select ***方式,同一键值,只生成一次位图,只有一个位图.
  SQL> Insert Into H病人挂号记录(Id,No,号别,执行人)
  Select 1,\'G000001\',1,\'张1\' From dual
  Union All
  Select 2,\'G000002\',1,\'张1\' From dual
  Union All
  Select 3,\'G000003\',1,\'张1\' From dual
  Union All
  Select 4,\'G000004\',1,\'张1\' From dual
  Union All
  Select 5,\'G000005\',1,\'张1\' From dual
  Union All
  Select 6,\'G000006\',1,\'张1\' From dual
  Union All
  Select 7,\'G000006\',1,\'张1\' From dual
  Union All
  Select 8,\'G000006\',1,\'张1\' From dual
  Union All
  Select 9,\'G000006\',1,\'张1\' From dual;
  SQL> commit;
  Commit complete
  SQL> alter system dump datafile 1 block 40028;
  System altered
  row#0[8006] flag: -----, lock: 2
  col 0; len 3; (3): d5 c5 31
  col 1; len 6; (6): 00 40 9c 54 00 00
  col 2; len 6; (6): 00 40 9c 54 00 0f
  col 3; len 3; (3): c9 ff 01
  row#1[8030] flag: ---D-, lock: 2
  col 0; NULL
  col 1; NULL
  col 2; NULL
  col 3; NULL
  ----- end of leaf block dump -----
  所以,位图索引最好采用批量插入方式,这样,每个键值只生成一个位图.而单行数据插入方式,每个键值将每8行数据生成一个位图.
  10G的情况,则简单得多.
  上面3种方式,相同键值的插入,位图的生成是一样的,只有一个位图,并且,每次提交时,并不会删除以前的位图,而是直接修改对应键值的位图.
  每次插入一行数据,插入9行后提交
  row#0[7763] flag: ------, lock: 2, len=29
  col 0; len 3; (3): d5 c5 31
  col 1; len 6; (6): 00 00 00 00 00 00
  col 2; len 6; (6): 00 40 ef f2 00 0f
  col 3; len 8; (8): f9 e4 d5 dc bc 01 ff 01
  ----- end of leaf block dump -----
  再批量插入9行数据并提交
  row#0[7733] flag: ------, lock: 2, len=30
  col 0; len 3; (3): d5 c5 31
  col 1; len 6; (6): 00 00 00 00 00 00
  col 2; len 6; (6): 00 40 ef f2 00 17
  col 3; len 9; (9): fa e4 d5 dc bc 01 ff ff 03
  ----- end of leaf block dump -----
  可以看出,10G对位图索引的存储进行了优化,一个键值在索引块中只有一个位图

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训