如果在联接条件中使用OR运算符以避免在SQL调整方面进行OR扩展,如何优化以下查询?
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;
具有OR条件将忽略使用索引。因此,一旦有了以下索引-
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;
此查询将使用索引,并且执行速度可能更快。