一个双向 Doctrine2 关系的性能是不是低于两个单向关系?

Posted

技术标签:

【中文标题】一个双向 Doctrine2 关系的性能是不是低于两个单向关系?【英文标题】:Is one bidirectional Doctrine2 relationship less performant than two unidirectionals relationships?一个双向 Doctrine2 关系的性能是否低于两个单向关系? 【发布时间】:2018-05-08 11:42:28 【问题描述】:

与 Doctrine2 最佳实践相关:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/best-practices.html

并与该帖子相关:Why is it recommended to avoid bidirectional relations in ORM?

我需要了解两个单向关系对性能的影响是否与一个双向关系一样多,或者更少,或者更多。

由于两种类型的关系导致相同的 SQL,性能问题似乎与水合、持久性和 DQL 查询有关。

就像这里解释的那样:https://ocramius.github.io/blog/doctrine-orm-optimization-hydration/

【问题讨论】:

【参考方案1】:

首先,重要的是要了解性能问题发生在 php 端而不是 DBMS 端。

双向关系导致的性能问题主要与两点有关:

模型变量的水合过程 使用许多 JOIN 子句进行 DQL 查询

所以这个问题的答案是否定的。即使您可以通过一个双向关系实现与使用两个单向关系相比可以实现的相同目标,但由于水合过程的优化,使用一个双向关系会更高效。

【讨论】:

以上是关于一个双向 Doctrine2 关系的性能是不是低于两个单向关系?的主要内容,如果未能解决你的问题,请参考以下文章

设计实体模型来管理多个双向关系

原则 2:双向关系,在不拥有的情况下添加实体不会持续存在

Doctrine 2 不能在 manyToOne 关系中使用 nullable=false?

+ 运算符的性能是不是低于 StringBuffer.append()

Doctrine2 findBy 关系对象触发字符串转换错误

在 Doctrine2 上找不到实体异常