首页 > 解决方案 > 如何避免 OR 扩展?

问题描述

如果在连接条件中使用 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;

标签: oracledatabase-performancesqlperformancesql-tuning

解决方案


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

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


推荐阅读