【问题标题】:How efficient are foreign keys?外键的效率如何?
【发布时间】:2013-01-06 15:23:48
【问题描述】:

很简单的问题:哪个更有效率?

  1. 父表上的DELETE 查询,然后是子表上的DELETE 查询
  2. 对父表的DELETE 查询导致外键从子表中删除行

为了进一步解释,我正在处理非常大的表(包含几百万行),我只是想知道外键提供的完整性是否值得 MySQL 必须做的额外工作,而不是仅仅记住更新/删除子表。在我真正继续更新以使用外键之前,我想知道;)

【问题讨论】:

  • 处处取舍。潜在的数据损坏是否值得性能提升?添加密钥并投入更多硬件是否值得提升性能和改进完整性?

标签: mysql foreign-keys


【解决方案1】:

无论您认为自己可以编写什么代码,数据库至少也可以完成,而且无需使用网络来完成。

使用外键。

【讨论】:

  • 我知道外键的存在是有原因的,但我不相信。数据库经常处于重负载状态,我经常发现我可以通过减少一些工作并改为使用 PHP 来获得更快的性能(例如,JOIN 查询可以通过选择更快从第一个表中,构建一个 PHP 数组以从第二个表中获取 ID,然后从第二个表中获取这些行并在 PHP 中将它们拼接在一起)。当我讨论这个主题时,如何防止(例如)超过 6 行具有相同值的触发器?
  • @Kolink 你的建议没有意义。通过多个客户端-服务器交互而不是一个交互来执行相同的过程不可能更有效。但我只能牵马下水……
  • 我对@9​​87654322@ 所做的是使用两个较小的查询来更均匀地分配工作。我会试一试外键,但如果数据库服务器开始崩溃,它们将是第一件事。
  • @Kolink 在 PHP 中进行这项工作不会减轻数据库的任何负担。数据库仍然完成 100% 的工作。您所做的只是影响时间并增加网络延迟和带宽消耗。您还将数据库完整性的责任从数据库转移到应用程序,这有其自身的成本,以美元而不是执行时间来衡量。
  • 明白。在创建我的项目的“版本 2”时,我会考虑您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
相关资源
最近更新 更多