我在工作时使用外键。但我们几乎手动管理我们的表,我们总是确保我们总是在另一个表中有一个父条目,用于通过其Id引用它的子条目。我们在同一事务中插入,更新和删除表中的父实体和子实体。
那么我们为什么还要保留这些外键呢?在数据库中插入新实体时,它们会降低数据库的速度,这可能是我们不时遇到死锁的原因之一。
它们是否真的被Sql Server用于其他事情?喜欢收集更好的统计数据,还是保持数据完整性的唯一目的?
答案 0 :(得分:2)
你不应该。使用外键删除约束。
答案 1 :(得分:1)
数据库控制杆上的检查是保护数据的最后一个完整性屏障。 对于性能问题,您可能希望删除外键,但最终可能需要维护部分损坏的数据库,这最终会成为一场噩梦。
Can Foreign key improve performance
外键约束提高了读取数据时的性能 但与此同时,它减慢了当时的表现 插入/修改/删除数据。
在读取查询的情况下,优化器可以使用外键 约束以创建更高效的查询计划作为外键 约束是预先声明的规则。这通常涉及跳绳 查询计划的某些部分,因为例如优化器可以看到 因为外键约束,所以不必执行 该计划的特定部分。