UPDATE
我认为现在还不成熟。经过多次测试后,我发现性能没有提高。我将在这里执行更多的测试并发布更新。直到那时,不用回答这个问题。SQL查询UNION性能
我有这样的查询...
SELECT DISTINCT TOP 11 [Field_A]
FROM [#TempTable]
WHERE [Field_A] NOT IN (SELECT bo.[Id]
FROM [BusinessObject_Table] bo
UNION
SELECT boTemp.[Id]
FROM [#BusinessObject_Table] boTemp)
该查询永远需要一个相当大的数据集上运行。我还在临时表的Id列中添加了CLUSTERED索引,这可以提高性能,但仍然无法完成。
我代替此查询这... ...
SELECT DISTINCT TOP 11 [Field_A]
FROM [#TempTable]
WHERE [Field_A] NOT IN (SELECT bo.[Id]
FROM [BusinessObject_Table] bo)
AND [Field_A] NOT IN (SELECT boTemp.[Id]
FROM [#BusinessObject_Table] boTemp)
这秒内完成。有人能解释这里发生了什么吗?
更新: 我以为两个查询都是一样的。这是我需要的。
BusinessObject_Table has following Ids: 1, 2, 3
#BusinessObject_Table has: 3, 4, 5
TempTable has rows whose Field_A values are: 1, 2, 3, 4, 6
查询的结果应该是:6(在上面的查询其变化)
我将努力让查询计划和岗位他们在这里。
请张贴计划。无论如何,查询都会做不同的事情。第二个检查它没有出现在两个表中。第一张桌子。第一个需要使用'intersect'或第二个'或'是相同的。 – 2012-03-27 09:22:52