找到此here:
通常,请考虑在以下任何一种情况下在列上创建索引:
我不明白为什么在这种情况下会发生全表锁。我想如果我试图删除/更新父表中的主键,那么将对子表执行全表扫描。
锁从哪里来?
答案 0 :(得分:5)
查看此Tom Kyte博客条目。在其中,他引用了Oracle documentation,其中提供了这种解释:
在第一种情况下,如果列未编制索引,则必须锁定整个表,因为Oracle不知道必须在子表中更新哪些行。使用索引,Oracle可以识别有问题的行并锁定它们。如果没有完整的表锁,则可以修改父级并让另一个会话将子级修改为违反约束的内容。