【问题标题】:MySQL does FK reduce insert/update operations?MySQL FK 会减少插入/更新操作吗?
【发布时间】:2017-10-17 13:49:46
【问题描述】:

有人知道,FK 会减少 MySQL 中的插入/更新操作吗? 我使用引擎 INNODB。

【问题讨论】:

    标签: mysql foreign-keys innodb


    【解决方案1】:
    • 在表上使用 FK 会隐式创建(并维护)索引。
    • 在执行某些写入操作时,会检查 FK 的隐式 INDEX 以验证其他表中是否存在相应的行。这是写入期间的一个较小的性能负担。
    • 在执行SELECT ... JOIN 时,您未能明确提供适当的索引,某些FK 产生的隐式索引可能会发挥作用。这对某些 JOINs 来说是一个很大的好处,但不需要 FK,因为您可以手动添加 INDEX
    • 如果 FK 定义包括 ON DELETE or UPDATE,则可能需要做更多的工作,尤其是对于 CASCADECASCADE 的效果可以通过 SELECT 加上更多代码来实现 - 但不如让 CASCADE 完成工作效率高。
    • FK 的功能有限。 Stackoverflow 上充斥着诸如“我怎样才能让 FK 做 X?”之类的问题。

    这听起来像“减少插入/更新操作”吗?

    【讨论】:

      【解决方案2】:

      FK 会减少 MySQL 中的插入/更新操作吗?

      这与 MySQL 无关,但是的 确实如此。在列上创建 FK 将创建二级索引,因此在 DML 操作时,这些索引也需要更新,以便获得正确的表统计信息。这样,DB优化器就可以生成正确高效的查询计划

      【讨论】:

      • 感谢您的回答,您能否提供一些文件让我可以阅读更多相关信息?我认为每个数据库都是如此,但我想知道它是如何与 MySQL 一起工作的。
      • @VIQ,当然...只需在 Google 中搜索 FK 或 index + mysql ...您将获得 MySQL 官方文档。通过它
      猜你喜欢
      • 2016-04-29
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2015-10-20
      相关资源
      最近更新 更多