2014-09-23 38 views
0

我有一个查询(简体),其计算C商店查询结果或使用嵌套查询

SELECT A + B AS C FROM Foo 

查询返回50万行。

我需要选择行的地方C < 0.3。要做到这一点,我将结果插入到一个临时表#Bar

INSERT INTO #Bar 
SELECT A + B AS C FROM Foo 

和适用条件

SELECT * 
FROM #Bar 
WHERE C < 0.3 

按照执行计划Table Insert成本86%。有没有更好的方法来获得C < 0.3? 我试过一个嵌套查询,它是一样的。

+2

不能使用where子句,比如“WHERE A + B <0.3”吗? – Arvo 2014-09-23 13:52:14

+0

您不能只看执行计划百分比(特别是因为您正在比较读取和写入)。整个事情**总共有100%,所以很可能一件*会比另一部分计划贵。它是相对的,并且告诉你**关于该部分查询/批处理的实际执行时间的很少**。你必须看看提供给你的所有信息。 – alroc 2014-09-23 14:00:32

+0

那么,A + B实际上是一个包含6个大公式的CASE – hidarikani 2014-09-23 14:03:50

回答

4

你不需要临时表在所有的,只要选择你想要什么:

SELECT A, B, C = A + B 
FROM Foo 
WHERE A + B < 0.3 
0

你可以做一个单一的查询像

SELECT C FROM 
(
SELECT A + B AS C FROM Foo 
) bar 
WHERE C < 0.3 

(OR)包含的条件in WHERE

SELECT A + B AS C FROM Foo 
WHERE A + B < 0.3 
1

所有的解决方案都可以正常工作。我只是添加了第三个选项,使用公共表格表达式来提供视图,并且它更容易阅读。

;WITH CTE_SELECT AS 
(
    SELECT A, B, C = A + B 
    FROM Foo 
    WHERE A + B < 0.3 
) 

SELECT * FROM CTE_SELECT 
+1

这个解决方案如何更好/不同于Tim提出的建议? – 2014-09-23 14:11:55

+1

http://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx – 2014-09-23 14:44:31