в JOIN?
Раз выполняются быстро - у тебя есть нормальная индексация данных. Остаётся только объединить всё правильно.
Вслепую сложно дать правильный совет. Всё зависит от логики. У меня даже в проектах, где было до почти 200 сущностей БД (не считая справочных таблиц) - ни разу не вылезло потребности в JOIN глубже 10-11 уровней. Если требуется сильно сложносочинённое объединение, например, в зависимости от промежуточных сумм, средних, границ по датам и т.п. (сильно попахивает построением отчётов по накапливаемым данным) - надо вкуриваться в логику построение. В таком раскладе часто оказываются эффективны хранимые процедуры с использованием temp tables и/или выборок вида WHERE EXISTS... либо JOIN temp_table с промежуточным набором.
foreach является "влобешниковым" переборным алгоритмом (а-ля безиндексный seek по базе) - это АДОВЫЕ тормоза всегда. Особенно если записи хотя бы тысячами. При даже одном уровне вложенности по 1000 значений - нутро цикла выполнится МИЛЛИОН раз. Это овердофига.
ну вот я и столкнулся с этим 1КК+ циклом. Хорошо, спасибо за рекомендации. Попробую написать один более сложный запрос с условиямми и обойтись без цикла
Обсуждают сегодня