1

次のコードがあるとします。

while (true)
{
    foreach($array as $row)
    {
       $item = $em->getRepository('reponame')->findOneBy(array('filter'));

       if (!$item)
       {
           $needPersist = true;
           $item = new Item();
       }

       $item->setItemName()
       // and so on ...

       if ($needPersist)
       {
           $em->persist();
       }
    }
    $em->flush();
}

したがって、ポイントは、コードが何度も実行されることです(サーバーは停止しません:))。そして、それを最適化したいのです。毎回:

  1. リポジトリから既にエントリを選択します。
  2. エントリが存在しない場合は作成します。
  3. それに新しい(更新)変数を設定します。
  4. アクションを適用します (フラッシュ)。

質問は - 不要なクエリを回避し、「エントリが存在するかどうかを確認する」を最適化する方法は? 100 から 500 のクエリがある場合、それほど怖くはありません... しかし、1 回の while ループで 1000 から 10000 になると、多すぎます。

PS: DB の各エントリは、(ID だけでなく) いくつかの列によって一意です。

4

2 に答える 2