【发布时间】:2014-07-12 04:09:06
【问题描述】:
我在一个更大的选择查询中使用了一个子查询,我需要对其进行优化才能将其上传到 Domo。我正在尝试为交易是否包含特定项目添加是/否列。这将显示在交易的所有行上。
它工作正常,但我处理的数据太多,以至于软件在处理所有数据之前就超时了。我可以在 SQL SMS 2012 中毫无问题地运行查询,但是有没有更简单/更快的方法来做到这一点?谢谢!
case
when transactions.transaction_id in
(select transaction_id
from transaction_lines
where item_id_0 = 'msa500'
group by transaction_id) then 'Yes'
else 'No'
end as ContainsMSA500
【问题讨论】:
-
您可以将子查询移动到 CTE。应该更快,因为 CTE 将被检索一次,而子查询是为每一行检索的
-
谢谢...我将对 CTE 进行一些研究。你能给我举个例子吗?我对 SQL 很陌生。
-
@cha 。 . .你从哪里得到这个想法?据我所知,SQL Server 通常不会实现 CTE。如果您知道有其他说明的文档,我会很高兴看到它。
-
@cha 抱歉,必须同意 Gordon 的观点——这根本不是 CTE 的工作方式。
-
@GordonLinoff:你成功了。我必须同意你的观点,即 CTE 没有实现。在这种情况下,我认为 CROSS APPLY 应该工作得更快。本文做一些性能分析explainextended.com/2009/07/16/inner-join-vs-cross-apply。
标签: sql group-by sql-server-2012 query-optimization case