使用静态表

时间:2018-01-25 08:04:51

标签: oracle locking database-indexes

我想对索引列有很多重复值的表使用位图索引的功能,但我在OLTP环境中。规则是您不能在OLTP环境中使用位图索引,因为当更新表中的行时,它会导致块级锁定。我绝对不希望块级锁定。

然而,我的表非常静态,即不太可能向其添加行。另外两个人不会同时添加行,因此锁定该表并不重要。

但我担心的是,如果在DML,DDL或sql语句中使用表以及其他表,那么使用位图索引锁定表是否会导致其他表的锁定。

因此在这种情况下使用位图索引是安全的,并且它可以导致锁定除了具有位图索引的表之外的表。

例如:

per_person_types

person_type_id description internal_name
1              Contractor  EMP
2              Employee    EMP
3              Terminated  TERM

我希望internal_name上的位图索引。

1 个答案:

答案 0 :(得分:1)

是的,在这里使用位图索引是安全的。

规则是每个表,而不是每个环境。数据库的易变性并不重要,只要相关表是静态的,位图索引就不会导致锁定问题。

the manual开始,使用位图索引的部分条件是:

  

索引表是只读的或不受重要影响   通过DML语句修改。

Oracle将锁信息与数据一起存储。它不跟踪全局表中的所有锁。锁定不相关的对象通常不会导致过多的锁定,锁定升级或其他问题。

此外,位图索引并非专门锁定每个块。位图可以被压缩,更新单行可能会锁定整个表。

如果您仍对位图索引感到紧张,可以尝试使用btree索引压缩。对于高重复性值,它可以显着缩小索引的大小,使某些操作更快。