前段时间由于一张核心表中存在位图索引,造成了严重而漫长的行锁争用(TX-row lock contention)。
经讨论,终于将位图索引改为了B树索引。
该表以前只用于存储历史数据,因此位图索引是合理的,但后来业务改造,也开始进行大量DML操作了,位图索引的问题就暴露出来。
OLTP系统中是不适合使用位图索引的,查阅了一下Tom的文章,截取如下:
关于相同字段上位图索引和B树索引的速度,两者基本相同。由于位图索引需要将位图转化为rowid,更消耗CPU,可能还会略慢一些。
问题b)Why Bitmap indexes do not update quickly? Is it only for update or any DML activities?

假如emp表中在更新雇员scott的数据时,job字段创建有位图索引,则scott的原职务和新职务对应数据都会被锁住。
以下是模拟该问题的实验截图:
我分别在object_type、object_type2字段创建B树索引和位图索引,并进行并发批量更新,后者遭遇了严重的行锁争用。


参考文档: https://asktom.oracle.com/pls/apex/asktom.search?tag=bitmap-indexes-200910
【实验】oracle中位图索引对DML操作的影响.TXT
