Я создаю приложение с Symfony 4 + Doctrine, где люди могут загружать большие файлы CSV, и эти записи затем сохраняются в базе данных.Перед вставкой я проверяю, что запись еще не существует ...
В примере файла CSV, содержащего только 1000 записей, это занимает 16 секунд без индекса и 8 секунд с индексом (MacBook 3Ghz - 16 ГБ памяти).Интуиция подсказывает мне, что это довольно медленно и должно быть выполнено менее чем за 1 секунду, особенно с индексом.
Индекс установлен для столбца электронной почты.
Мой код:
$ssList = $this->em->getRepository(EmailList::class)->findOneBy(["id" => 1]);
foreach ($csv as $record) {
$subscriber_exists = $this->em->getRepository(Subscriber::class)
->findOneByEmail($record['email']);
if ($subscriber_exists === NULL) {
$subscriber = (new Subscriber())
->setEmail($record['email'])
->setFirstname($record['first_name'])
->addEmailList($ssList)
;
$this->em->persist($subscriber);
$this->em->flush();
}
}
Мой вопрос:
Как я могу ускорить этот процесс?