2016-06-07 53 views
0

我有一个我从未见过的独特问题。首先我会简化看看是否有明显的答案。如有必要,我可以发布有关查询/执行计划的更多详细信息。SQL Server冗余过滤器性能

编辑:无法附加实际执行计划。它也很大,所以我不能粘贴XML。我的公司会阻止网站将文件保存在其他位置。我希望以前有人看到过这一点,并提出了寻找的建议。

我有一个观点,即基本上是:

Select A.Customer 
     B.CustomerType 
     c.SalesPersonName 
     A.LineAmount 

From FactOrder A 
Join customer b on a.Customer = a.Customer 
Join SalesPerson c on a.SalesRepID = c.SalesRepID 

我再对视图顶部的脚本。它首先将客户列表放在变量表中,通常是少数。

Select v.Customer 
    ,  SUM(v.lineamount) as Sales 
From View v 
Join @CustomerList c on v.customer = c.Customer 
Where v.Customer in (select Customer From @CustomerList) 
Group by v.Customer 

我用的是哪里一个加入过滤,和我得到几乎立竿见影的效果。如果我只使用1种方法,它只是旋转。有任何想法吗?

+0

当试图添加我的问题的其余部分时,不断收到错误..试图找出答案。 –

+0

什么是客户?我和@Siyual在一起,我不了解你。 – sagi

+0

当我试图粘贴我的问题的其余部分时,我不断收到错误。现在有充分的问题。 –

回答

0

确保您在任何适合的表中使用表别名。你也不需要where子句,它已经在INNER JOIN中完成;

SELECT 
v.Customer 
,SUM(v.ineamount) as Sales 
FROM View v 
JOIN @Customer c on v.customer = c.Customer 
GROUP BY v.Customer 
+0

这是我的问题。我有内部连接来过滤和Where子句。如果我在查询中留下两个,我会立即得到结果。如果我选择其中的一个,它会旋转并永不完成。 –

+0

在开启实际执行计划的情况下运行它,查询之间有什么区别? –

+0

这个计划是非常不同的。如果我的问题没有明显的答案,我将不得不学会解读执行计划中的差异,并再次发布更多细节。今天我要试着去做。谢谢 –