Donnerstag, Oktober 07, 2010

Hash und Nested Loop Joins

Tanel Poder fragt in seinem Blog nach dem fundamentalsten Unterschied zwischen Hash und Nested Loop Joins und gibt anschließend die Antwort zur Frage:
und die lautet:
"Hash joins can not look up rows from the inner (probed) row source based on values retrieved from the outer (driving) row source, nested loops can."
Ausführlicher und mit Beispielen führt er das dann unter folgender Adresse aus: http://tech.e2sn.com/oracle/sql/the-fundamental-difference-between-nested-loops-and-hash-joins. Interessant ist das allemal, obwohl ich mir fast etwas Tiefgründigeres erwartet hatte. Beinahe noch interessanter fand ich Christian Antogninis Kommentar zur Frage:
Honestly, I’m not able to say what is the *most fundamental difference*. In fact, I see four main differences:
1) HJ processes the right input at most one time; NL might process the right input many times
2) HJ are not able to apply join conditions through indexes; NL are able to do so
3) HJ does not support cross joins, theta joins, and partitioned outer joins; NL supports all types of joins
4) HJ joins supports all types of trees; NL do not support right-deep and zig-zag trees
Nr. 1 war mir halbwegs klar, Nr. 2 leuchtet ein (und wird in Tanel Poders Artikel schön illustriert), aber Nr. 3 und Nr. 4 sind mir völlig neu. Bei Tom Kyte liest man immer wieder, dass er jeden Tag etwas Neues über Oracle lernt. Ich lerne zwar auch, aber leider vergesse ich schneller, als ich lerne...

Keine Kommentare:

Kommentar veröffentlichen