1

情况:

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

程序:

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

有没有更优雅的方法来做到这一点?

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

4

1 回答 1

3

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

使用索引,最坏的情况是索引范围扫描。

编辑:更多信息和一个脚本来确定这是否是你的问题可以在这里找到。 http://asktom.oracle.com/tkyte/unindex/index.html

于 2009-01-30T14:45:36.580 回答