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



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

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

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

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

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

外键可以提高性能吗

外键约束提高读取数据时的性能 但同时它会减慢性能 插入/修改/删除数据。

在读取查询的情况下,优化程序可以使用外键 将更高效的查询计划创建为外键的约束 约束是预先声明的规则。这通常涉及跳过 查询计划的某些部分,因为例如优化程序可以看到 由于外键约束,没有必要执行 计划的特定部分。

最新更新