假设我们有这样的代码:
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();
}
所以,关键是代码将被执行很多次(而服务器不会死:))。我们想要优化它。每次我们:
- 从存储库中选择已经条目。
- 如果条目不存在,则创建它。
- 为其设置新的(更新)变量。
- 应用操作(刷新)。
所以问题是 - 如何避免不必要的查询并优化“检查条目是否存在”?因为当有 100-500 个查询时它并不那么可怕......但是当它在一个 while 循环中达到 1000-10000 时 - 它太多了。
PS:DB 中的每个条目在多列中都是唯一的(不仅仅是 ID)。