Django - PostgreSQL ForeignKeyField和ManyToManyField性能

时间:2015-11-25 02:47:32

标签: django postgresql django-models

我曾被告知在不考虑性能影响的情况下自由使用外键。这篇博客文章另有说法:http://bonesmoses.org/2014/05/14/foreign-keys-are-not-free/

通过搜索,似乎DB关系的性能不是经常讨论的。根据我发现的少量信息,看起来应该在必要时使用外键,但如果它是可选的则可以避免使用。 ManyToManyField实际上是两个ForeignKeyField操作,因此性能影响等于两个外键的影响。

这些信息准确吗?我不太了解这种性能影响在实践中有多重要或微不足道,我真的很想看到它。

1 个答案:

答案 0 :(得分:1)

  

这些信息准确吗?

可能。

  

我不能全面了解这种绩效影响在实践中有多重要或微不足道......

嗯,这是你的第一个问题,俗话说premature optimization is the root of all evil。在您完全了解您的系统之前,如果有任何影响可以优化外键,那就很难说了。

例如,考虑一个查询花费1ms查询数据库,但是在另一秒之后将内容传递给用户之前执行其他操作需要1秒。

根据您链接的文章,经过一段时间后,您的查询速度可能会慢95%,并且运行时间接近2毫秒。

这意味着您将优化以在2秒的动作中节省1毫秒,最终节省0.001%的努力。

在您对应用程序进行全面分析并确定数据库中的外键时间是最关键的时间损失之前,请不要担心,因为重写Django DB抽象层的时间和节省的时间如果您的数据不同步,可能会比您保存的数据多出几个数量级。