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索引查找=快速。