Как избежать ИЛИ расширения? - PullRequest
3 голосов
/ 12 марта 2020

Как оптимизировать следующий запрос, если оператор ИЛИ используется в условии соединения, чтобы избежать расширения ИЛИ с точки зрения настройки SQL?

SELECT t1.A, t2.B, t1.C, t1.D, t2.E 
   FROM t1 LEFT JOIN t2
   ON t1.A=t2.A OR t1.B=t2.C;

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Попробуйте, так как вы выбираете результат в той же строке, все должно быть в порядке.

FROM
t1
LEFT JOIN t2 as AT1  ON t1.A=AT1.A 
LEFT JOIN t2 as AT2  ON  t1.B=AT2.C;
0 голосов
/ 12 марта 2020

Условие ИЛИ будет игнорировать использование индексов. Поэтому, если у вас есть следующие индексы -

t1 (A, B)
t2 (A, C)

Вы можете попробовать выполнить запрос ниже с предложением UNION ALL -

SELECT t1.A, t2.B, t1.C, t1.D, t2.E 
FROM t1 LEFT JOIN t2 ON t1.A=t2.A
UNION ALL
SELECT t1.A, t2.B, t1.C, t1.D, t2.E
FROM t1 LEFT JOIN t2 ON t1.B=t2.C;

Этот запрос будет использовать индекс и может выполняться быстрее.

...