Я использовал запрос на соединение, он работает нормально, но занимает очень много времени (30 секунд с использованием MySQL Workbench).
Как я могу улучшить время выполнения, переписав приведенный ниже запрос.
Запрос выглядит следующим образом:
$queryBuilder = $this->getQueryBuilder();
$queryBuilder
->select('count(*) as numberValidatedParts')
->from($this->tableName, 'p') // p for parts table
->innerJoin('p', 'cpk_catalog', 'cc', 'cc.part_id = p.part_id')
->innerJoin('p', 'images_catalog', 'ic', 'ic.sku_id = cc.sku_id')
->innerJoin('p', 'images', 'i', 'i.ImageId = ic.ImageId')
->where('i.IsValidated = 1')
->andWhere('p.is_active = 1')
->groupBy('cc.sku_id')
->having('numberValidatedParts = (
select count(*) as totalNumberOfParts
from images_catalog as ic
where ic.`sku_id`=cc.`sku_id`
)');
$sql = sprintf('select count(*) from (%s) as number', $queryBuilder->getSQL());
return $this->doctrine->query($sql)->fetch(PDO::FETCH_COLUMN);