使用子表删除许多记录

时间:2009-01-30 14:12:16

标签: oracle parent-child

情况:

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

步骤:

  • 删除子表中的记录,
  • 禁用约束(如果未在下一步中禁用约束,则需要永久删除),
  • 删除TBL表中的记录,
  • 启用约束。

这样做有更优雅的方法吗?

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

1 个答案:

答案 0 :(得分:3)

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

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

修改: 可以在此处找到更多信息以及确定这是否是您的问题的脚本。 http://asktom.oracle.com/tkyte/unindex/index.html