在这里找到这个:
通常,在以下任何一种情况下,请考虑在列上创建索引:
- 索引列上存在参照完整性约束。索引是一种避免全表锁定的方法,如果您更新父表主键、合并到父表或从父表中删除,则该全表锁定是必需的。
我不明白为什么在这种情况下会发生全表锁。我会认为,如果我尝试删除/更新父表中的主键,则会对子表执行全表扫描。
锁从何而来?
在这里找到这个:
通常,在以下任何一种情况下,请考虑在列上创建索引:
我不明白为什么在这种情况下会发生全表锁。我会认为,如果我尝试删除/更新父表中的主键,则会对子表执行全表扫描。
锁从何而来?
看看这个Tom Kyte博客条目。在其中,他提到了Oracle 文档,其中提供了以下解释:
在第一种情况下,如果列没有索引,则必须锁定整个表,因为 Oracle 不知道必须更新子表中的哪些行。使用索引,Oracle 可以识别有问题的行并锁定它们。如果没有全表锁定,则可以修改父级并让另一个会话将子级修改为违反约束的内容。