ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DML和位图索引维护

DML和位图索引维护

原创 Linux操作系统 作者:westzq1984 时间:2009-12-07 14:52:35 0 删除 编辑

以前只知道位图索引不适合于OLTP系统,因为其DML操作会一锁锁多行
今天看了下,还存在个DML和位图维护的关系

先看进行DML前的位图:
row#0[8004] flag: -----, lock: 0
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  01 40 2f f4 00 00
col 2; len 6; (6):  01 40 2f f8 00 07
col 3; len 8; (8):  c8 7f c0 44 f8 90 02 7f

只有数据3,节点1个,位图覆盖的范围为01 40 2f f4 00 00到01 40 2f f8 00 07

-------------------------------------------------------------------------------------

一次更新所有数据
 UPDATE test1 SET ID=2;

row#0[7970] flag: -----, lock: 2
col 0; len 2; (2):  c1 03
col 1; len 6; (6):  01 40 2f f4 00 00
col 2; len 6; (6):  01 40 2f f8 00 07
col 3; len 8; (8):  c8 7f c0 44 f8 90 02 7f
row#1[8004] flag: ---D-, lock: 2
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  01 40 2f f4 00 00
col 2; len 6; (6):  01 40 2f f8 00 07
col 3; len 8; (8):  c8 7f c0 44 f8 90 02 7f
row#2[7998] flag: ---D-, lock: 2
col 0; NULL
col 1; NULL
col 2; NULL
col 3; NULL

节点1个,位图覆盖范围还是所有块

-------------------------------------------------------------------------------------

那看看一次更新一条的结果
 BEGIN
 FOR i IN (SELECT * FROM test1 WHERE ID=2) LOOP
   UPDATE test1 SET ID=3 WHERE ID=2 AND ROWNUM=1;
   COMMIT;
 END LOOP;
 END;

row#0[7327] flag: ---D-, lock: 2
col 0; len 2; (2):  c1 03
col 1; len 6; (6):  01 40 2f f4 00 00
col 2; len 6; (6):  01 40 2f f8 00 07
col 3; len 3; (3):  c6 dc 02
row#1[7624] flag: -----, lock: 0
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  01 40 2f f4 00 00
col 2; len 6; (6):  01 40 2f f4 00 07
col 3; len 2; (2):  c8 7f
row#2[7579] flag: -----, lock: 0
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  01 40 2f f5 00 00
col 2; len 6; (6):  01 40 2f f5 00 07
col 3; len 1; (1):  00
row#3[7305] flag: ---D-, lock: 2
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  01 40 2f f8 00 00
col 2; len 6; (6):  01 40 2f f8 00 07
col 3; len 2; (2):  c8 3f
row#4[7283] flag: -----, lock: 2
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  01 40 2f f8 00 00
col 2; len 6; (6):  01 40 2f f8 00 07
col 3; len 2; (2):  c8 7f

可以看到现在有3个节点了,每个节点的位图覆盖范围无法超过其所在的数据块。
另,位图覆盖范围无法超过其所在的数据块,不受事务提交的影响。

这样可能造成更多的存储空间需要,以及查询时,访问更多的位图块。至于这种情况下,各个位图合并的开销有多大,暂时还不知道

 

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

下一篇: exists和连接方式
请登录后发表评论 登录
全部评论

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    1042173