Oracle 中参照完整性子表的索引列

Indexing columns on referential integrity child tables in Oracle

据我所知,在作为引用完整性约束的子成员的 table 的列上建立索引是一种行之有效的好做法。

这可以防止死锁,因为如果没有索引,Oracle 将无法锁定单个较低级别的资源以防止可能违反参照完整性的并发插入。

我也知道,如果索引包含的列多于构建 FK 的列,则 FK 列需要是索引的前导列。

我想知道在两列 FK 关系的情况下会发生什么情况,在子关系列上有两个索引,其中只有一个索引在 4 的前导位置具有 FK 列column B-Tree index,另一个在5 column B-Tree index的第一和第五位置有FK列。

不必指出这种索引做法很糟糕,需要重新设计索引,我会做的。

只是为了好奇和了解更多关于这个主题的信息,在这种情况下是否总是使用 FK 列位于前导位置的索引来进行行锁定?

我在使用 Oracle 12c R1

无需深入探讨锁定语义,答案是肯定的。如果您的 FK 列的索引 顺序正确 领先位置 中,它将被使用。如果您还有其他索引也没有关系。事实上,您的两个索引都可以,这取决于应用程序。也许它将它们用于重要查询。