在使用静态表的 OLTP 环境中位图索引的 Oracle 块级锁定

Oracle block level locking for bitmap indexes in an OLTP environment where using static tables

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

但是我的 table 是非常静态的,即不太可能向其中添加一行。此外,两个人不会同时添加行,因此锁定 table 并不那么重要。

不过我担心的是,如果 table 用于 DML、DDL 或 sql 语句以及其他 tables.

那么在这种情况下使用位图索引是否安全,它是否会导致锁定 table 而不是带有位图索引的 table。

例如:

Table per_person_types:

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

我想要 internal_name 上的位图索引。

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

规则是 per table,而不是 per environment。不管数据库有多不稳定,只要相关 table 是静态的,位图索引就不会导致锁定问题。

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

The indexed table is either read-only or not subject to significant modification by DML statements.

Oracle 将锁定信息与数据一起存储。它不跟踪全局 table 中的所有锁。给不相关的对象加锁一般不会造成锁太多、锁升级等问题。

此外,位图索引不会专门针对每个块进行锁定。可以压缩位图,更新单行可能会锁定整个 table.

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