首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL -FK在网络应用程序中有用/可行吗?

MySQL -FK在网络应用程序中有用/可行吗?
EN

Stack Overflow用户
提问于 2010-06-02 11:26:00
回答 8查看 395关注 0票数 4

我遇到过与FK和web应用程序相关的讨论。基本上,有些人说FK在web应用程序中并不代表真正的改进,在某些情况下甚至可以使应用程序变慢。

你们觉得呢,你们有什么经验?

编辑:请注意,我知道FK的工作和目标,我只是不确定它们是否会对youtube之类的web应用程序的性能产生显著的负面影响。

--

这句话来自Heikki Tuuri,InnoDB引擎的创建者,Innobase的创始人和首席执行官:

InnoDB在更新行时立即检查外键,不执行批处理或检查延迟到事务提交外键通常是严重的性能开销,但有助于保持数据一致性 外键增加行级锁定的数量,除了直接更新的表外,还可以将其扩展到许多表中。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-02 14:20:42

外部密钥是您和数据完整性问题之间的一个有用的障碍。他们告诉数据库代表您做额外的工作,以确保您定义的完整性被强制执行,不管一些应用程序代码有多么糟糕。这在他们的职业生涯中至少挽救了每个DB程序员的脖子。你绝对应该在你的模型中设计外键,特别是当你认为你不需要外键的时候。

也就是说,如果您在数据库层上限制可伸缩性,那么FKs可能会被关闭,因为理论上说,FKs是在重复您的应用程序已经在做的工作(也就是说,您的应用程序不应该被编码成蓄意破坏关系完整性的事情,如果不是FKs的话)。这并不是针对心灰意冷的人,因此并不总是性能上的胜利(一些联接更有效率,因为DB知道某些关系是否可以产生行)。

与所有优化一样,规则1是“不要做它”,第2条规则是“不要做它(还)”。确保如果你要沿着这条路走:

1)您有一个特定的性能负载数据来支持您的决定

2)您有能力用开关打开或关闭它们(即不要删除它们并丢弃代码,而且绝对不要忽略设计它们)。

3)您有能力定期验证您设计的完整性约束是否被应用程序代码正确地强制执行(例如,一项夜间作业,它验证没有孤儿)。

票数 3
EN

Stack Overflow用户

发布于 2010-06-02 11:29:41

外键将确保表order_details中包含引用orders表的字段order_id的行永远不会有不存在于orders表中的order_id值。

外键不需要有一个工作的关系数据库,但它们绝对是必要的,以避免破裂的关系和孤儿行(即。参考完整性)。中的C必须具备在数据库级别强制执行引用完整性的能力。

至于您对性能的关注,一般来说,性能的影响(如果有的话)可以忽略不计。我建议把你所有的外键约束,只有当你有真正的性能问题,你无法解决的情况下,没有它们的实验。

此外,作为附带说明,虽然与MySQL没有直接关系,但这是Microsoft模式和实践:第14章改进Server性能的引文。

当主键和外键被定义为数据库架构中的约束时,服务器可以使用这些信息创建最佳执行计划。

票数 14
EN

Stack Overflow用户

发布于 2010-06-02 11:27:48

保存您的外键-它确保,无论您有什么木偶为您编写代码,您的数据保持在一种可用的和预期的格式。除非你看到的是大量的流量,否则我甚至不会考虑移除它们。

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

https://stackoverflow.com/questions/2957174

复制
相关文章

相似问题

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