位图索引在读密集的环境中能很好的工作,但是在写密集的环境不是非常出色,原因很明确:一个位图索引键条目指向多行。即一个会话更改了索引键指向的一条数据,那么在这个索引键的其它行也会被锁,可做一下实验。
先建立一个位图索引
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)中的全部行。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25361369/viewspace-697337/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25361369/viewspace-697337/