Я чувствую, что правильное место для выполнения JOIN находится в базе данных, даже если это может означать дополнительный код, необходимый со стороны приложения, как вы сказали.
Объединение на уровне приложения исключит любые оптимизации базы данных, которые может использовать оптимизатор базы данных, если "join" находится внутри БД. База данных оптимизатора выбирает вариант возврата обратных записей на основе статистики по значениям таблиц / столбцов / гистограмм и целого ряда оптимизаций.
Возьмем, к примеру, циклические логи c. Если у нас есть маленькая таблица с именем dept и большая таблица с именем emp и если мы хотим выполнить объединение запросов для двух в БД. Скорее всего, он будет использовать вложенный l oop, что может быть более эффективным, поскольку большую таблицу необходимо пройти всего один раз, чтобы получить все соответствующие записи. А если таблица dept широкая (много столбцов), оптимизатор может выбрать: используйте индекс и получите тот же результат эффективным способом
В случае, если обе таблицы велики, оптимизатор может выбрать соединение ha sh или сортированное соединение.
Рассмотрим альтернативу, в вашем приложении, если вы хотите присоединиться, вы будете использовать только циклическую логику c все время (в основном вложенную l oop) или если вы хотите реализовать сложный алгоритм выполнения "соединения", вы бы дублирование всех усилий, затраченных на создание базы данных.
Так что, на мой взгляд, лучший вариант - использовать дб для любых операций, связанных с SET (JOIN, FILTER, AGGREGATION)