优化我的查询学说symfony

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化我的查询学说symfony相关的知识,希望对你有一定的参考价值。

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

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

有人可以帮助,谢谢你

答案

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


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

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

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

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


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

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

以上是关于优化我的查询学说symfony的主要内容,如果未能解决你的问题,请参考以下文章

Symfony - 在学说查询构建器中使用 orWhere()

Symfony 学说 DQL 随机结果在使用 MaxResult 的查询中

如何使用 symfony2 学说查询生成器选择不同的查询?

学说查询的语法错误 (Symfony2)

Symfony2 和空关系的学说

Symfony 2 实体连接或学说查询连接