如何在编译期间使用 WHERE 子句中的 OR 将自身拆分为两个带有 UNION 的查询的查询?如果我手动重写它,使用 UNION 的查询比单个查询快 100 倍,因为它可以有效地在联合的每个查询中使用不同的索引。有什么办法可以让优化器使用这种方法?
我有一个看起来像这样的查询:
select columnlist
from table1
join table2 on joincond2
join table3 on joincond3
where conditions1
and ((@param1 is null and cond3a) or (cond3b))
其中 columnlist、joincond2、joincond3 和 conditions1 都是较长的表达式。更重要的是,OR 中只有一个条件永远为真。
我一开始以为我可以重写它来做联合,但后来我重复了 columnlist、joincond2、joincond3 和 conditions1,这是 20 行左右的 SQL,将来可能需要大量维护。有没有我可以提供的提示或更好的方法来编写 WHERE 子句?提前致谢。