当前位置: 首页 > 知识库问答 >
问题:

添加约束时alter table查询耗时过长

锺离嘉容
2023-03-14
ALTER TABLE person
ADD CONSTRAINT person_Office_FK
FOREIGN KEY ( Office_id )
REFERENCES Office ( Office_id ) ;

office有大约500,000行,表person有大约500万行

这个问题是永远的,我不知道发生了什么。

共有1个答案

陈铭晨
2023-03-14

在添加约束之前,请确保office表上的office_id有聚集索引,而person表上的office_id有非聚集索引。

请记住,在person表中每次出现office_id都需要对照每个office_id记录进行检查。如果你要删除一个办公室记录,这也会加快速度。

您不希望禁用检查,因为您的约束将不受信任,并且您不会获得外键在查询优化器中给您带来的性能好处。

 类似资料:
  • 我有一个迁移脚本之间的2个不同的模式数据库。脚本做了3件事:1。禁用约束2。将记录从旧架构插入到新架构3。启用约束 我发现这两个约束在旧的模式中是不存在的。这2个表的表结构定义有什么问题吗?

  • 我正在将错误消息添加到登录屏幕。 虽然代码运行良好,并且执行我希望它执行的操作。它会在执行时导致约束错误。 以下是受影响的约束: 下面是导致errorView出现的函数。 如何在不破坏约束的情况下更改约束? 我尝试self.view.update约束()-但是什么也没有做。我还尝试在添加约束之前删除它们,但是仍然有一个错误。 任何帮助都将不胜感激! 编辑: 我找到了一个Objective-c解决方

  • 我有这样的桌子 数据如下所示,开始时间和结束时间是连续的时间跨度: 因此,如果用户传递两个参数,则可以在任意时间段内选择* 它应该以如下方式返回表: 你看,棘手的部分是将原始的时间跨度削减到用户定义的时间跨度(@from-@To),我已经为此奋斗了一整天。请指教。 提前非常感谢你!!!

  • 如何在下面的本机搜索查询中添加查询超时?

  • 问题内容: 我想向表中添加一列,然后添加检查约束以确保其大于0。我似乎无法使它在oracle sl开发人员中运行。 错误报告-SQL错误:ORA-00904 ::无效的标识符00904。00000-“%s:无效的标识符” 问题答案: 语法中没有子句。只是。 这是 SQLFiddle 演示