优化我的查询学说symfony

时间:2017-12-29 18:54:52

标签: sql symfony doctrine-orm

我试图优化我的查询。

它需要非常慢,需要超过50次才能获得结果: - (

我有超过120 000个数据。

这是我的查询

$q = $this->_em->createQuery("SELECT c FROM AppBundle:Cabinne c JOIN AppBundle:Rdv r WITH c.id NOT 
    IN  (SELECT us.id FROM  AppBundle:Rdv rv JOIN rv.cabinne_id us  JOIN us.centre cee 
    WHERE  (rv.dateRdv >= :start AND rv.dateRdv < :enddate  AND  rv.etat = :etat ) 
    OR (rv.dateRdv <= :start AND rv.DateFin > :start  AND  rv.etat = :etat ) 
    OR (rv.dateRdv < :start AND rv.DateFin > :enddate  AND  rv.etat = :etat ) AND cee.id = :id )  JOIN c.centre ceee WHERE  ceee.id = :id ");


    $q->setParameter('start', $start);
    $q->setParameter('enddate', $end);
    $q->setParameter('etat', 1);
    $q->setParameter('id', $id);

有人可以帮忙吗 谢谢

1 个答案:

答案 0 :(得分:0)

简单回答:Paginate并且只获得前10个结果。

否则我希望您尝试在后台处理上执行此操作。如果没有,您还需要优化其他内容而不是查询。

1)我确信这段代码执行速度非常快〜2ms,因为你没有执行查询。请添加完整的代码。

2)您是否使用symfony profiler或mysql log slow查询并检查生成的查询?没有学说运行该查询需要多长时间?哪个是RDMS执行计划在SQL(不是DQL)前面添加描述?

3)可能你最大的问题是你如何处理学说水合物的数据。尝试通过xdebug分析看看在水化器中花费了多少时间。水化器会降低你的查询速度吗?

如果问题是查询时间。您可能需要创建数据库视图和一些索引。 RDMS执行计划将向您显示问题所在。

如果您的问题出现在保湿器上,您可以尝试返回迭代器并使用按需保温器迭代结果。