Oracle 删除包含子表的多条记录

Oracle 删除包含子表的多条记录,oracle,parent-child,Oracle,Parent Child,情况: 表TBL有~10k个要删除的条目 表TBL有14个子表,删除规则为“无操作” 我想删除子表中的10k项和引用项 程序: 删除子表中的记录 禁用约束(如果未禁用约束,则在下一步中删除将永远耗时) 删除TBL表中的记录 启用约束 还有更优雅的方法吗 问题是,第三步花费的时间太长,因为它要检查14个大表是否存在不存在的记录。我的过程有很好的执行时间,但我认为还有更优雅的方法。听起来您需要在子表上索引外键。每次删除子表上没有索引的父记录时,它都必须对子表进行完整的表扫描,以检查外键约束是

情况:

  • 表TBL有~10k个要删除的条目
  • 表TBL有14个子表,删除规则为“无操作”
  • 我想删除子表中的10k项和引用项
程序:

  • 删除子表中的记录
  • 禁用约束(如果未禁用约束,则在下一步中删除将永远耗时)
  • 删除TBL表中的记录
  • 启用约束
还有更优雅的方法吗


问题是,第三步花费的时间太长,因为它要检查14个大表是否存在不存在的记录。我的过程有很好的执行时间,但我认为还有更优雅的方法。

听起来您需要在子表上索引外键。每次删除子表上没有索引的父记录时,它都必须对子表进行完整的表扫描,以检查外键约束是否被破坏

对于索引,最坏的情况是索引范围扫描

编辑: 更多信息和脚本,以确定这是否是您的问题可以在这里找到。

这是一个很好的提示和AskTom链接(我投了赞成票),但是子表在这个FK上被索引。我主要关心的是,如果在约束关闭时,另一个会话将坏数据插入子表中。如果不可能,那么您应该可以。您需要为子表中的FK列编制索引。你做了14个FTS。那太慢了。14索引查找=快速。