O ile poważnie nie zrozumiałem, logika tego pytania jest bardzo błędna
Jeśli jest 20 wierszy w B dla każdego A, 1000 wierszy w A oznacza 20 tys. Wierszy w B. Nie może być tylko 100 wierszy w B, chyba że istnieje wiele-wiele tabeli „AB” z 20 000 wierszami zawierającymi odwzorowanie .
Aby uzyskać wszystkie informacje o tym, które 20 ze 100 wierszy B jest mapowanych na każdy wiersz A, również tabela AB. Więc to byłoby albo:
- 3 zestawy wyników po 100, 1000 i 20 tys. Wierszy oraz klient JOIN
- pojedynczy zestaw wyników JOINed A-AB-B z 20 tys. wierszy
Tak więc „JOIN” w kliencie nie dodaje żadnej wartości podczas badania danych. Nie żeby to nie był zły pomysł. Gdybym pobierał jeden obiekt z bazy danych, może bardziej sensowne byłoby rozbicie go na oddzielne zestawy wyników. W przypadku połączenia typu raportu prawie zawsze spłaszczam go w jeden.
W każdym razie powiedziałbym, że połączenie krzyżowe tej wielkości prawie nie ma sensu. To kiepski przykład.
Musisz gdzieś DOŁĄCZYĆ i właśnie w tym RDBMS są dobre. Nie chciałbym pracować z żadną małpą kodu klienta, która uważa, że może zrobić lepiej.
Refleksja:
Aby dołączyć do klienta, wymagane są trwałe obiekty, takie jak DataTables (w .net). Jeśli masz jeden spłaszczony zestaw wyników, można go zużyć za pomocą czegoś lżejszego, takiego jak DataReader. Duża ilość = dużo zasobów klienta używanych w celu uniknięcia JOIN bazy danych.