如何避免OR扩展?

问题描述 投票:1回答:1

如果在联接条件中使用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;
oracle database-performance sqlperformance sql-tuning
1个回答
0
投票

具有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;

此查询将使用索引,并且执行速度可能更快。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.