如果我们手动保证数据库完整性,我应该删除外键吗?

时间:2017-10-31 08:30:55

标签: sql sql-server

我在工作时使用外键。但我们几乎手动管理我们的表,我们总是确保我们总是在另一个表中有一个父条目,用于通过其Id引用它的子条目。我们在同一事务中插入,更新和删除表中的父实体和子实体。

那么我们为什么还要保留这些外键呢?在数据库中插入新实体时,它们会降低数据库的速度,这可能是我们不时遇到死锁的原因之一。

它们是否真的被Sql Server用于其他事情?喜欢收集更好的统计数据,还是保持数据完整性的唯一目的?

2 个答案:

答案 0 :(得分:2)

你不应该。使用外键删除约束。

答案 1 :(得分:1)

数据库控制杆上的检查是保护数据的最后一个完整性屏障。 对于性能问题,您可能希望删除外键,但最终可能需要维护部分损坏的数据库,这最终会成为一场噩梦。

Can Foreign key improve performance

  

外键约束提高了读取数据时的性能   但与此同时,它减慢了当时的表现   插入/修改/删除数据。

     

在读取查询的情况下,优化器可以使用外键   约束以创建更高效​​的查询计划作为外键   约束是预先声明的规则。这通常涉及跳绳   查询计划的某些部分,因为例如优化器可以看到   因为外键约束,所以不必执行   该计划的特定部分。