繁体   English   中英

SQL Server外键约束的好处

[英]SQL Server Foreign Key constraint benefits

我们正在设计一个数据库,我需要考虑一些FK(外键)约束。 但它不仅限于正式的结构化和规范化。 我们只有在提供任何性能或可扩展性优势时才会使用它。

我一直在通过一些有趣的文章和谷歌搜索实际的好处。 以下是一些链接:

http://www.mssqltips.com/tip.asp?tip=1296

我想更多地了解FK的好处(除了正式的结构和着名的级联删除\\更新)。

  • FK默认情况下没有“索引”,因此在索引FK时需要考虑哪些因素?

  • 如何处理映射为外键的可空字段 - 这是允许的吗?

  • 除了索引之外,这是否有助于优化SQL-Server中的查询执行计划?

我知道还有更多,但我更愿意专家就此发表意见。 请指导我。

  • 外键不提供性能或可伸缩性优势。
  • 外键强制引用完整性。 如果有人试图从父表中删除错误的行,则可以通过引发错误来提供实际的好处。
  • 默认情况下,外键未编入索引。 您应该索引外键列,因为这样可以避免在删除/更新父行时对子表进行表扫描。
  • 您可以使外键列可为空并插入null。

主要的好处是,如果您的错误客户端代码试图做错了,您的数据库将不会最终不一致。 外键是一种“约束”,所以你应该如何使用它们。

他们没有任何“功能”好处,他们不会优化任何东西。 您仍然必须自己创建索引等。是的,您可以在作为外键的列中具有NULL值。

FK约束使您的数据保持一致。 而已。 这是主要的好处。 FK约束不会为您提供任何性能提升。

但是,除非你有目的的db结构非规范化,否则我建议你使用FK约束。 主要原因 - 一致性。

我已经在net上读过至少一个示例,其中显示外键确实提高了性能,因为优化器不必对表进行额外的检查,因为它知道数据已经因FK而满足某些条件。 对不起,我没有链接,但博客提供了详细的查询计划输出来证明它。

如上所述,它们用于数据完整性。 任何性能“损失”都会被修复损坏数据所需的时间彻底消除。

但是,可能存在间接的性能优势。

至少对于SQL Server,FK中的列必须在每一侧具有相同的数据类型。 如果没有FK,您可以拥有nvarchar父级和varchar子级。 当您加入2个表时,您将获得可以扼杀性能的数据类型转换。

示例:导致问题的不同varchar长度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM