位图索引影响并发性的原因


位图索引在读密集的环境中能很好的工作,但是在写密集的环境不是非常出色,原因很明确:一个位图索引键条目指向多行。即一个会话更改了索引键指向的一条数据,那么在这个索引键的其它行也会被锁,可做一下实验。

先建立一个位图索引

create bitmap index bitmap_emp_job on emp(job);

在scott下的emp表job列建立。

session one:

naruto@ORCL>select empno,job from scott.emp order by job;

     EMPNO JOB
---------- ---------
      7788 ANALYST
      7902 ANALYST
      7934 CLERK
      7900 CLERK
      7369 CLERK
      7876 CLERK
      7698 MANAGER
      7566 MANAGER
      7782 MANAGER
      7839 PRESIDENT
      7844 SALESMAN
      7654 SALESMAN
      7521 SALESMAN
      7499 SALESMAN

已选择14行。

naruto@ORCL>delete from scott.emp where empno = 7788;

已删除 1 行。


另一个会话
session two:

scott@ORCL>delete from emp where empno = 7902;
不是一条数据,但是这个会话还是被堵塞了,原因就是这两条数据被同一条索引键所指向(job均为ANALYST),会话一的delete语句锁住了这条索引键的全部行。

回滚两个会话。

对job列进行更新还会影响到两个索引键,进行如下实验:

session one:
naruto@ORCL>select empno,job from scott.emp order by job;

     EMPNO JOB
---------- ---------
      7788 ANALYST
      7902 ANALYST
      7934 CLERK
      7900 CLERK
      7369 CLERK
      7876 CLERK
      7698 MANAGER
      7566 MANAGER
      7782 MANAGER
      7839 PRESIDENT
      7844 SALESMAN
      7654 SALESMAN
      7521 SALESMAN
      7499 SALESMAN

已选择14行。
naruto@ORCL>update scott.emp set job = 'CLERK' where empno = 7788;

已更新 1 行。

sesion two:
scott@ORCL>delete from emp where job = 'CLERK';

会话2被锁住,原因很简单,会话1的update语句锁住了两个索引键(ANALYST、CLERK)中的全部行。

001.gif

 

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

转载于:http://blog.itpub.net/25361369/viewspace-697337/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值