2017-12-29 43 views
-1

私は自分のクエリを最適化しようとしています。私のクエリを最適化するdoctrine symfony

私が120の以上の000のデータを持っている

:-(結果を取得するために50以上のsecondesを取り、本当に遅い取る。

をここに私のクエリは

$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); 

ができています誰かが助けてください ありがとう

答えて

0

簡単な答え:最初の10回resutlsを取得してください。


それ以外の場合は、バックグラウンド処理でこれを実行してください。そうでない場合は、クエリの代わりに最適化すべきものがあります。

1)私は、このコードがクエリを実行していないので、2msという非常に高速で実行されると確信しています。完全なコードを追加してください。

2)symfonyプロファイラまたはmysqlログの低速クエリを使用してクエリが生成されたことを確認しましたか? doctrineなしでクエリを実行するにはどのくらいの時間がかかりますか? RDMS実行計画はSQL(DQLではない)の前に記述してください。

3)あなたの最大の問題は、ドクトリンヒュトレーターのデータをどのように扱うかということでしょう。 xdebugプロファイリングを使用してハイドレーターでどれくらいの時間を費やしているかを確認してください。ハイドレーターはあなたの質問を遅くするものですか?


問題がクエリ時間の場合。データベースビューといくつかのインデックスを作成する必要があります。 RDMS実行計画は、問題のどこに表示されます。

問題がハイドレーターにある場合は、イテレーターを戻して、オンデマンドハイドレーターで結果を反復しようとすることができます。