EAV +单表继承 - 水化性能问题 - Doctrine2

时间:2015-04-02 09:17:52

标签: symfony doctrine-orm entity-attribute-value single-table-inheritance

目前,我正在试验Doctrine 2中的EAV +单表继承方法。

我有一个具有许多值的Base-Class,并且我有多个Base-Class子类。子类是相关的。

在以下CodeExample中,除Value外,所有实体都是BaseClass的SubClasses。

在这个例子中,水合作用需要3200毫秒:

        $qb = $this->createQueryBuilder('p')
            ->select('p', 'rip', 'rs', 'c', 'pv', 'ripv', 'rsv', 'cv')
            ->leftJoin("p.revisionsInProject", "rip")
            ->leftJoin("rip.revisionState", "rs")
            ->leftJoin("rs.component", "c")
            ->leftJoin("p.values", "pv")
            ->leftJoin("c.values", "cv")
            ->leftJoin("rs.values", "rsv")
            ->leftJoin("rip.values", "ripv")
            ->where("p.id = '".$id."'");

        $q = $qb->getQuery();

        return $q->getSingleResult();

在这个例子中,水合作用只需要302毫秒。唯一的区别是我从查询中删除了p.valuespv

        $qb = $this->createQueryBuilder('p')
            ->select('p', 'rip', 'rs', 'c', 'ripv', 'rsv', 'cv')
            ->leftJoin("p.revisionsInProject", "rip")
            ->leftJoin("rip.revisionState", "rs")
            ->leftJoin("rs.component", "c")
            ->leftJoin("c.values", "cv")
            ->leftJoin("rs.values", "rsv")
            ->leftJoin("rip.values", "ripv")
            ->where("p.id = '".$id."'");

        $q = $qb->getQuery();

        return $q->getSingleResult();

当我使用ARRAYSCALAR等其他补水模式时问题无法解决。它们有点快,但仍然可笑很长。

任何人都可以解释为什么会这样吗?其他值(c.values, rs.values, rip.values)不会显着改变性能。

代码本身可以在Github

查看

0 个答案:

没有答案