首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果一个表有许多(20+)外键约束,有什么缺点吗?

如果一个表有许多(20+)外键约束,有什么缺点吗?
EN

Stack Overflow用户
提问于 2009-07-15 20:18:45
回答 6查看 355关注 0票数 0

假设我有一个表,其中有许多字段链接到来自其他“值表”的值。当然,我在每个元素上都声明了外键约束,以增强完整性。

如果我最终得到了20-30个这样的字段的数量,该怎么办?它会不会以某种方式“减慢”表操作?

附加:值表应该只有很少的记录,通常是5-10个或更多。数据库为SQL Server 2008。

EN

回答 6

Stack Overflow用户

发布于 2009-07-15 20:50:29

当您在子表中插入一行时,DB引擎将查找父表中是否存在相应的值-这将占用一些CPU和一些逻辑读取。如果您的父表很小,它们很可能在缓存中,因此您不会期望在拐杖热之后立即进行许多缓慢的物理读取。

我更关心的是,如果你打算从父表中删除:如果你的子表没有相应的索引,整个子表将被锁定和扫描。另一方面,如果您的所有外键都有相应的索引,那么您的子表上最终可能会有多达20-30个额外的索引,这是一个相当大的减慢。

您可能希望运行自己的基准测试,并亲自查看。

票数 2
EN

Stack Overflow用户

发布于 2009-07-15 20:23:26

只有一个外键会降低插入/更新操作的速度,而不是没有外键-因为数据库必须检查外键值是否确实存在。有30个外键比没有外键慢。

也就是说,它到底会慢多少取决于很多因素,包括你正在使用的值表/数据库引擎的大小/索引/等等……并且在最佳情况下实际上可以忽略不计。

票数 1
EN

Stack Overflow用户

发布于 2009-07-15 20:31:32

是的,由于检查了所有相关的约束,所以在插入和更新时会有一些性能损失,但这不太可能导致任何问题,除非您尝试以高速率插入数据。正确地维护数据通常比快速维护数据更重要,因此惩罚是值得的。

如果执行一些列的更新,则只需要检查这些列上的约束,并且大多数DBMS只会检查这些约束。

当然,SELECT语句根本不会慢下来,而且在某些(可能很少)情况下,优化器甚至可以从知道正在连接的两个表之间的外键关系中受益。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1133740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档