一尘不染

向MySQL引入外键是否会降低性能

sql

我正在构建Ruby on Rails 2.3.5应用程序。默认情况下,Ruby on
Rails不提供外键约束,因此我必须手动进行操作。我想知道引入外键是否会降低数据库方面的查询性能,以至于不值得这样做。在这种情况下,性能是我的首要任务,因为我可以检查代码与数据的一致性。您的一般建议是什么?您是否建议使用外键?您如何建议我应该对此进行衡量?


阅读 202

收藏
2021-03-17

共1个答案

一尘不染

假设:

  1. 您已经在使用支持FK的存储引擎(即:InnoDB)
  2. 您已经在所涉及的列上建立了索引

然后,我猜测通过让MySQL强制执行完整性,您将获得更好的性能。毕竟,强制引用完整性是数据库引擎经过优化可以执行的任务。相比之下,编写自己的代码来管理Ruby中的完整性会很慢。

如果需要从MyISAM迁移到InnoDB以获取FK功能,则需要考虑两个引擎之间的性能折衷。

如果您还没有索引,则需要确定是否要使用它们。一般来说,如果您执行的读取操作比写入操作多,则您需要(甚至需要)这些索引。

将FK堆叠在当前已建立索引的内容之上,比在应用程序代码中实现这类检查不会造成整体性能下降。

2021-03-17