当前位置:  开发笔记 > 程序员 > 正文

外键可以损害查询性能

如何解决《外键可以损害查询性能》经验,为你挑选了3个好方法。

正如我在本文中所理解的,在某些情况下,外键可以提高查询性能.

我听到了相反的说法,即由于参照完整性检查,外键实际上可能会损害查询性能.在哪种情况下(如果有的话)这是真的吗?


1)术语查询似乎具有误导性.我对各种表现处罚感兴趣.

2)是否有人对INSERT,DELETE或UPDATE语句的负面影响有任何实际数字(我知道这取决于特定的系统,但是,任何类型的真实世界测量都会受到赞赏)?



1> melkisadek..:

如果引用完整性需要外键,那么外键的存在应构成性能的基线

你不妨问一下,如果你不把座位放进去,一辆车可以走得更快 - 一辆造型良好的汽车包括座位,就像一个结构良好的数据库包括外键一样



2> Dean J..:

我假设对于INSERT查询,约束 - 包括外键约束 - 会稍微降低性能.数据库必须检查您告诉它插入的内容是您的约束允许它插入的内容.

对于SELECT查询,外键约束不应对性能进行任何更改.

由于INSERTS几乎总是非常快,除了在边缘情况下,少量的额外时间将不会明显.(构建一个几千兆字节的数据库,您可能希望禁用约束,然后在以后重新启用,只要您确定数据是好的.)



3> Remus Rusanu..:

理论上,是的:数据写入需要验证约束.

在实践中,很少:除非另有测量和证明,否则您可以假设没有性能影响.绝大多数情况下,由于其他问题而出现性能问题:

错误的架构设计(缺少索引,错误的聚簇索引选择)

争用(阻塞),再次由于错误的架构设计(表扫描保证锁冲突)

糟糕的查询设计

在设计良好的架构和良好的查询上,约束的成本将开始以非常高的吞吐量出现.发生这种情况时,有预防措施.

我的2c:永远不要牺牲一些难以捉摸的表现目标的正确性限制.在非常罕见的情况下,当约束确实是问题时,有测量结果表明情况就是这样,并且俗话说:如果你不得不问它需要多少费用,你就买不起.如果你不得不问问约束是否有问题,你就不能删除它们(没有违法行为).

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有