Если я серьезно не понял, логика в вопросе очень ошибочна
Если для каждого A имеется 20 строк в B, то 1000 строк в A означают 20 000 строк в B. В B не может быть только 100 строк, если не существует таблицы много-много "AB" с 20 000 строк с отображением. ,
Таким образом, чтобы получить всю информацию о том, какие 20 из 100 строк B соответствуют каждой строке A, которую вы также включили в таблицу AB. Так что это будет либо:
- 3 набора результатов по 100, 1000 и 20 тыс. Строк и клиентское соединение
- один результирующий набор JOINed A-AB-B с 20 тыс. строк
Таким образом, «JOIN» в клиенте добавляет значение при проверке данных. Не то чтобы это не плохая идея. Если бы я извлекал один объект из базы данных, то, возможно, более разумно было бы разбить его на отдельные наборы результатов. Для вызова с типом отчета я бы почти всегда сводил его в один.
В любом случае, я бы сказал, что перекрестное соединение такого масштаба практически бесполезно. Это плохой пример.
Вы должны где-то ПРИСОЕДИНЯТЬСЯ, и в этом СУБД хороши. Я не хотел бы работать с любой обезьяной кода клиента, которая думает, что они могут добиться большего успеха.
Запоздалая мысль:
Для присоединения к клиенту требуются постоянные объекты, такие как DataTables (в .net). Если у вас есть один плоский набор результатов, его можно использовать с помощью чего-то более легкого, например DataReader. Большой объем = много клиентских ресурсов, используемых для обхода базы данных.