使用SQL Server数据库,我有一些SQL代码试图从联合表中获取并且工作正常。SQL Server查询长时间联合使用和列查看
新的要求是将列添加到从视图读取的现有SQL语句。我运行了单独的SQL语句,添加新列后它们运行良好,并且聊天的时间比原始时间稍长。
现在试图运行所有的SQL语句与联合在一起,它永远在运行。
select
col 1, col 2, col3,
case
when 'ee' = (select col 5 from view1 where X.id = id)
then 'xx'
else 'yy'
end as newcol1
from
X, Y, Z
where
condn 1 and condn 2
union
select
col 1, col 2, col3,
case
when 'ee' = (select col 5 from view1 where X.id = id)
then 'xx'
else 'yy'
end as newcol1
from
X, Y, Z
where
condn 3 and condn 4
union
select
col 1, col 2, col3,
case
when 'ee' = (select col 5 from view1 where X.id = id)
then 'xx'
else 'yy'
end as newcol1
from
X, Y, Z
where
condn 5 and condn 6
有关优化此查询的任何建议吗?
这不是一个查询......这是伪代码......“来自X,Y,Z”是ansi 89语法的3路笛卡尔乘积。这本身应该表现糟糕。最重要的是,相关的子查询“(来自view1的SELECT Col 5 ...”将对外部查询中的每一行执行一次......然后......你正在做3次.. 。而顶尖的樱桃是你使用UNION而不是UNION ALL的意思,这意味着你已经在混合中增加了一个独特的操作。你可能在这里有一个完美的风暴。 –
[踢坏的习惯:用旧的 - 样式联接](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 旧式*逗号在ANSI - ** 92 ** SQL标准(** 25年**之前)中,表*样式的分离列表被替换为* proper * ANSI'JOIN'语法,并且不鼓励使用它 –
感谢您的回复。将更改为使用连接,如何更改newcol1以更好地执行使用上述我能够得到我需要的结果,但它的性能很差,请提供一个例子作为vladatr。 – user3761541