sql >> Databáze >  >> RDS >> Oracle

Jaký je rozdíl mezi spojením hash a spojením sloučení (Oracle RDBMS)?

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:

  1. 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.
  2. 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.
  3. 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



  1. Jak odstranit úvodní a koncové znaky v MySQL

  2. Jak vypočítám velikost tabulek v Oracle

  3. Funkce MySQL POW() – Zvyšte hodnotu na sílu jiné hodnoty

  4. Jak dám každému registrovanému uživateli jeho vlastní URL pomocí PHP?