Я немного преувеличиваю, когда говорю, что они злые.
Для очень больших наборов данных, даже если они вписываются в одну базу данных, объединение является дорогой операцией (много непоследовательного ввода-вывода). При типичной загрузке веб-приложения (90/10 для чтения / записи) ваше чтение должно быть как можно более дешевым, в то время как вы можете тратить больше времени на запись (и во многих случаях лениво реплицировать записи). В типичном высокопроизводительном веб-приложении вы захотите выполнить все операции ввода-вывода базы данных в течение пары сотен миллисекунд, так что это ваш первый предел. Во-вторых, вы хотите иметь возможность выполнять множество параллельных запросов. Это указывает на возможность собирать записи прямо из индекса для больших таблиц. Кто-то уже упоминал, что вам не нужно отправлять тонну данных в браузер, поэтому выполнять объединение по всему набору данных не нужно, но рассмотрите порядок: если вы не можете получить записи в правильном порядке прямо из индекс, вам нужно выполнить все объединение, прежде чем упорядочить результаты.
Для данных с несколькими компьютерами применимы те же проблемы, но в большем масштабе. Обычное решение - материализованные представления (сглаживание данных), позволяющие выполнять запросы, подобные соединению, выполняя множественные записи во время вставки / обновления / удаления (или лениво после) и используя очень простые индексированные выборки.
Очевидно, что объединения полезны и прекрасно работают большую часть времени. Но для больших наборов данных в базе данных, которые изначально не поддерживают материализованные представления, это происходит при высокой параллелизации больших наборов данных.
И особая претензия к Django заключается в том, что из-за негибкости в изменении моделей существующих данных людям рекомендуется создавать сопоставляемые таблицы 1-к-1, которые только когда-либо объединяются, вместо добавления столбцов в существующие таблицы.