可能是重复问题:
外键有什么问题?
我使用 MS Sql Server,拥有一个大约 4 GB 数据的大型数据库。
我在网上搜索了为什么应该使用外键。 目前我只索引用于连接表的键。 性能完全正常,数据完整性没有问题。
我应该使用外键吗?使用外键会获得更好的性能吗?
可能是重复问题:
外键有什么问题?
我使用 MS Sql Server,拥有一个大约 4 GB 数据的大型数据库。
我在网上搜索了为什么应该使用外键。 目前我只索引用于连接表的键。 性能完全正常,数据完整性没有问题。
我应该使用外键吗?使用外键会获得更好的性能吗?
外键实际上并不会提高性能,事实上它们会在所有写操作中产生小的性能惩罚,以确保遵循约束。
你想使用这些东西的原因是为了防止破坏性的写操作。如果没有它们,有错误的代码或糟糕的SQL语句可能会删除预期存在的行。
完整性可能今天不是问题,但这正是使其在明天或两周后成为问题的态度。
SET FOREIGN_KEY_CHECKS=0
禁用外键。外键还有助于保持数据库的清洁,因为您可以让数据库进行级联删除操作。
外键可以提高数据完整性,但在删除/插入/更新数据时会略微降低性能。
在我的上一家公司中,我们决定将完整性和连接保持在业务逻辑层,因为这样可以使业务逻辑的更改变得更加简单(想象一下处理数亿条记录)。如果您的应用程序很小,我认为没有理由不能在数据层(数据库)中实现。