gpt4 book ai didi

sql - 在 SQL Server 2000 中对 OR 强制使用 UNION 以进行优化

转载 作者:行者123 更新时间:2023-12-03 17:20:00 24 4
gpt4 key购买 nike

如何在编译期间使用 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 子句?提前致谢。

最佳答案

你可以分组

select columnlist
from table1
join table2 on joincond2
join table3 on joincond3

进入一个 View ,然后使用union。

但是如果可以迁移到sql2005/8,
您可以使用公用表表达式。
with cte ( columnlist )
as (
select columnlist
from table1
join table2 on joincond2
join table3 on joincond3 )
select columnlist from cte where ...
union
select columnlist from cte where ...

关于sql - 在 SQL Server 2000 中对 OR 强制使用 UNION 以进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com