Вообще говоря, делай присоединение в СУБД. Если вы делаете это на сервере приложений, вы держите пари, что вы лучше справляетесь с оптимизацией объединений, чем люди, которые написали СУБД, и (что дальше) вы можете превзойти их лучшие усилия настолько, чтобы компенсировать затраты на передача несвязанных данных по проводам.
Теперь, если вы собираетесь создать перекрестное произведение двух широких таблиц (допустим, что они T1 с N1 строками ширины W1 и T2 с N2 строками ширины W2) без фильтрации, то СУБД обязан создавать и отправлять по проводам N1 * N2 * (W1 + W2) байтов данных, в то время как таблицы можно обрабатывать отдельно как N1 * W1 + N2 * W2 байтов данных. Если N1 = N2 = 1M и W1 = W2 = 100, то это 200 ТБ против 200 МБ передачи данных в пользу перекрестного продукта на сервере приложений. Но это не совсем справедливо для СУБД. Большинство запросов не настолько глупы - они объединяются в столбцы и применяют условия, и оптимизатор СУБД будет изо всех сил (и автоматически) минимизировать проделанную работу. Кроме того, он только отправит вам соответствующие данные; он не должен отправлять все строки, которые не соответствуют вашим критериям.
Чтобы показать альтернативный сценарий (в пользу СУБД), рассмотрим случай, когда T1 имеет N1 = 1M строк ширины W1 = 100, а T2 имеет N2 = 100K строк ширины W2 = 50. Существует соединение между две таблицы в целочисленном столбце, и поэтому в T1 по 10 строк для каждой записи в T2. Предположим, что вы всасываете все T1 и T2 на сервер приложений: для этого требуется N1 * W1 + N2 * W2 = 105 МБ данных. Но условия фильтрации ограничивают данные 1/10 строк в T2, и для каждой строки в T1, которая соответствует строке в T2, фактически есть только 2 строки, которые соответствуют условиям фильтра. Сейчас СУБД только собирается переводить
N2 * (W1 + W2) / 5 = 3 МБ, экономия более 100 МБ при передаче данных СУБД. Теперь, если вам удастся быть умным и загрузить только N2 * W2 / 10 = 500 КБ данных, соответствующих значениям в T2, вам все равно придется заставить СУБД выполнить «полусоединение» T1 со значениями Вы хотите получить правильные строки от T1 до сервера приложений. Если вам нужно только подмножество столбцов, может быть другой набор сбережений. И СУБД, как правило, имеют довольно умные пакеты сортировки; вам понадобится хороший пакет сортировки на вашем сервере приложений для представления данных в правильном порядке.
Обычно это должен быть выигрыш при соединениях в СУБД. Если это не так, это потому, что вы просите сервер выполнить больше работы, чем он может обработать. В этом случае вам необходимо выяснить, имеет ли смысл репликация сервера базы данных, или добавление большего количества ядер, или большей пропускной способности сети, или большей оперативной памяти.