Это запрос, который я выполняю (без некоторых несоответствующих соединений):
SELECT a.*, c.id
FROM a
LEFT OUTER JOIN b ON a.id = b.id_anunciante
LEFT OUTER JOIN c ON c.id = b.id_rubro
GROUP BY a.id
Каждая строка «a» связана от 1 до 5 строк в «b».
Проблема в том, что у GROUP BY есть проблемы с производительностью (при использовании GROUP BY требуется 10 или более раз, чем при отсутствии). Мне нужно получить только одну строку каждого члена в «а».
Как я могу сделать это быстрее?
edit: мне нужно иметь возможность фильтровать по a.id и / или c.id. Набор результатов, который я должен получить, - это только 1 строка на «действительный» член «a», то есть строки, соответствующие ограничениям. Строки, которые не соответствуют фильтрам, возвращаться не должны.
В моем исходном запросе это было бы сделано следующим образом:
SELECT a.*, c.id
FROM a
LEFT OUTER JOIN b ON a.id = b.id_anunciante
LEFT OUTER JOIN c ON c.id = b.id_rubro
WHERE c.id = 1
OR a.id = 1
GROUP BY a.id
a.id, b.id_anunciante, b.id_rubro, c.id - все индексы.