Ich habe die Notwendigkeit, eine riesige Tabelle (10 Millionen plus Zeilen) zu einer Nachschlagetabelle (15k plus Zeilen) mit einer ODER-Bedingung zu verbinden. Etwas wie:Redshift - effiziente JOIN-Klausel mit OR
SELECT t1.a, t1.b, nvl(t1.c, t2.c), nvl(t1.d, t2.d)
FROM table1 t1
JOIN table2 t2 ON t1.c = t2.c OR t1.d = t2.d;
Dies liegt daran, tabelle1 c
oder d
als NULL
haben kann, und ich möchte auf welcher auch immer beizutreten zur Verfügung steht, den Rest Weglassen. Der Abfrageplan sagt, dass es eine verschachtelte Schleife gibt, die ich wegen der Bedingung OR
realisiere. Gibt es eine saubere und effiziente Lösung dieses Problems? Ich benutze Redshift.
EDIT: Ich versuche, dies mit einem UNION
auszuführen, aber es scheint nicht schneller als zuvor zu sein.
Können Sie den Abfrageplan freigeben? – greginvm
Stellen Sie sicher, dass Sie "union all" für Fälle verwenden, in denen Duplikate kein Problem darstellen, da sie viel schneller sind. – systemjack