【发布时间】:2014-05-06 19:17:53
【问题描述】:
我使用教义 2 开发 symfony 2 应用程序。我的代码是:
$userSites = $this->getDoctrine()->getManager()
->createQuery('SELECT us, s FROM MyMainBundle:UserSite us JOIN us.site s WHERE us.user = :user_id')
->setParameter('user_id', $user_id)
->getResult();
它通常返回大约 7000 多条记录。当我将此查询直接传递给 mysql(使用 getSql() 并粘贴到 phpmyadmin)时,它需要 0,008 秒。但是 getResult() 大约需要 20-30 秒。 :( 为什么?我可以加快速度吗?
【问题讨论】:
-
我遇到了这个问题,但使用了 Doctrine 1。我已经解决了将水合模式从对象切换到数组的问题。我认为你也可以在 Doctrine 2 上做到这一点。试试这个:
$userSites = $this->getDoctrine()->getManager()->createQuery('SELECT us, s FROM MyMainBundle:UserSite us JOIN us.site s WHERE us.user = :user_id')->setParameter('user_id', $user_id)->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY); -
我将 getResult() 更改为 getArrayResult()。现在大约需要 5 秒。但我觉得还是太长了……
-
您能否发布由 Doctrine 生成的查询,以便我们检查它与原始查询之间的区别?
-
您是否可能在您的实体中执行大量 CPU 资源?
-
@vsmoraes 即使 5 年后,您的解决方案仍然适用!
标签: php mysql symfony doctrine-orm