Можно ли ускорить sql запрос?

В doctrine:

$this->createQueryBuilder()
     ->where('field IN (array)')
     ->setParameter('array', $array)
     ->andWhere('param = :param')
     ->setParameter('param', bool)
     ->select('field')
     ->getQuery()
     ->getResult();

один параметр boolean, второй массив, в массиве может быть много значений (от 100 тыс)


Ответы (1 шт):

Автор решения: Александр К

Желательно видеть полную структуру таблицы в БД. Запрос может тормозить из-за отсутствия индекса на поле field и param. Массив значений в любом случае желательно уменьшить до 500-1000 через чанкование:

$chunks = array_chunk($array, 500);

foreach ($chunk as $chunks) {
    $this->createQueryBuilder()
        ->where('field IN (array)')
        ->setParameter('array', $chunk)
        ->andWhere('param = :param')
        ->setParameter('param', bool)
        ->select('field')
        ->getQuery()
        ->getResult();
    // Результат собираем в общий массив
}

Если нужно еще больше ускорить запросы, тогда есть смысл использоать нативные SQL запросы минуя доктрину.

→ Ссылка