优化我的查询学说symfony

问题描述 投票:-1回答:1

我正在尝试优化我的查询。

它需要非常慢,需要超过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);

有人可以帮助,谢谢你

sql symfony doctrine-orm
1个回答
0
投票

简单回答:分页并获得前10个结果。


否则,我希望你在后台处理上尝试这样做。如果没有,你还有其他优化而不是查询。

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

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

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


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

如果您的问题出在水化器上,您可以尝试返回迭代器并使用按需水合器迭代结果。

© www.soinside.com 2019 - 2024. All rights reserved.