场景1:正确定义外键
场景2:关于删除和更新记录的,我可以确保在不定义任何FK的情况下编写API时不会留下孤立的数据。此外,我将在插入时检查数据完整性。
那么,这两种情况之间有什么区别呢?我只想知道使用FK (定量分析)会得到什么好处。我会在场景1比2中获得更好的性能吗?我是MySQL数据库设计方面的新手。
发布于 2017-04-09 05:20:15
表演差异..。
FK检查必须到达另一个表(通过索引)进行完整性检查。然而..。
情况1:简单的FK:
在许多情况下,您可以通过了解应用程序代码的流程,向自己保证某些FK违规行为“不会”发生。例如,当您插入一行中的两个表(并且检查了错误等),而第二个表指向您刚刚插入的第一个表的行时,那么FK测试是多余的,会损害性能(有点)。
另一方面,如果您通过执行额外的SELECT来“模拟”FK检查,那将是一个显著的性能打击。
情况2: FK,级联删除:
如果您使用FKs来“级联删除”(等等),那么这可能比手动删除更有效。
此外,如果您可以对DELETEs进行批处理,那么它可能比让级联一个接一个地完成它们更快。
另一条评论:“副作用”,如‘级联’被认为(被一些人认为)是一个顽皮的编码实践。
但是..。以上的差异可能不足以改变你的应用程序。
https://stackoverflow.com/questions/43302633
复制相似问题