Вот такой запрос отрабатывает за ~0.06 секунды:
SELECT COUNT(DISTINCT c.layer) FROM vulnerability AS v
JOIN vulnerability_configuration_mask AS vc ON v.id = vc.vulnerability_id
JOIN configuration_mask_component AS cc ON cc.configuration_mask_id = vc.configuration_mask_id
JOIN component AS c ON c.id = cc.component_id
WHERE v.id = 3
, меняя «v.id = 3» на «v.id = <любой id>», все равно все «летает».
Хочу получить такой результат для всех v сразу. Делаю так:
SELECT vmain.id,
(
SELECT COUNT(DISTINCT c.layer) FROM vulnerability AS v
JOIN vulnerability_configuration_mask AS vc ON v.id = vc.vulnerability_id
JOIN configuration_mask_component AS cc ON cc.configuration_mask_id = vc.configuration_mask_id
JOIN component AS c ON c.id = cc.component_id
WHERE v.id = vmain.id
)
FROM vulnerability AS vmain
, и начинаются дикие тормоза. Считалось около 2 минут - я прервал запрос. С LIMIT 10 в конце считается за 36 секунд.
Почему после добавления внешнего запроса скорость так упала и как это исправить?