Spojení "sort merge" se provádí tříděním dvou datových sad, které mají být spojeny, podle spojovacích klíčů a jejich následným sloučením. Sloučení je velmi levné, ale řazení může být neúnosně drahé, zejména pokud se řazení rozlije na disk. Náklady na třídění lze snížit, pokud lze k jedné z datových sad přistupovat v setříděném pořadí prostřednictvím indexu, ačkoli přístup k velkému podílu bloků tabulky prostřednictvím skenování indexu může být také velmi nákladný ve srovnání s úplným skenováním tabulky. .
Hašovací spojení se provádí hašováním jedné datové sady do paměti na základě spojených sloupců a čtením druhé a hledáním shod v hašovací tabulce. Hašovací spojení je velmi nízké náklady, když může být hašovací tabulka celá uložena v paměti, přičemž celkové náklady jsou velmi málo vyšší než náklady na čtení datových sad. Náklady rostou, pokud musí být hashovací tabulka přemístěna na disk jednoprůchodovým řazením, a značně stoupá u víceprůchodového řazení.
(Ve pre-10g byla vnější spojení z velké na malou tabulku problematická z hlediska výkonu, protože optimalizátor nedokázal vyřešit nutnost přistupovat nejprve k menší tabulce pro hash spojení, ale k větší tabulce jako první pro vnější spojení. V důsledku toho nebyla spojení hash v této situaci dostupná).
Náklady na hašovací spojení lze snížit rozdělením obou tabulek na spojovací klíč(e). To umožňuje optimalizátoru odvodit, že řádky z oddílu v jedné tabulce naleznou shodu pouze v konkrétním oddílu druhé tabulky, a pro tabulky s n oddíly se hash spojení provede jako n nezávislých hash spojení. To má následující účinky:
- Velikost každé hashovací tabulky je zmenšena, čímž se snižuje maximální množství požadované paměti a může být odstraněno, že operace vyžaduje dočasné místo na disku.
- U paralelních dotazovacích operací je množství zasílání zpráv mezi procesy výrazně sníženo, což snižuje využití CPU a zlepšuje výkon, protože každé spojení hash může provádět jeden pár procesů PQ.
- U neparalelních dotazovacích operací jsou požadavky na paměť sníženy faktorem n a první řádky jsou promítnuty z dotazu dříve.
Měli byste si uvědomit, že hash joiny lze použít pouze pro equi-joins, ale slučovací spojení jsou flexibilnější.
Obecně platí, že pokud spojujete velké množství dat do equi-joinu, pak bude hash join lepší sázkou.
Toto téma je velmi dobře pokryto v dokumentaci.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523
12.1 dokumenty:https://docs.oracle.com/database/121/TGSQL/tgsql_join.htm