优化我的查询学说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()