Мне нужно подключить огромную таблицу (10 миллионов плюс строки) к таблице поиска (15k плюс строки) с условием ИЛИ. Что-то вроде:Redshift - эффективное предложение JOIN с 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;
Это потому, что table1 может иметь c
или d
как NULL
, и я хотел бы присоединиться в зависимости от того, есть в наличии, оставляя все остальное. В плане запроса говорится, что существует вложенный цикл, который, как я понимаю, обусловлен состоянием OR
. Есть ли чистый и эффективный способ решения этой проблемы? Я использую Redshift.
EDIT: Я пытаюсь запустить это с помощью UNION
, но он, похоже, не быстрее, чем раньше.
Вы можете поделиться планом запроса? – greginvm
Убедитесь, что вы используете 'union all' для случаев, когда дубликаты не являются проблемой, так как это намного быстрее. – systemjack