2012-06-26 99 views
1

我有九个不同的数据库代表公司,都在同一台SQL Server 2008计算机上。WHERE在使用UNION ALL在多个数据库的其他视图上使用UNION ALL的情况

在每个公司数据库中都有一个名为gltrxdet_vw的视图。这是在多个表中定义的,我可以做一个

SELECT x, y, z, SUM(amt) AS amt_ 
FROM gltrxdet_vw 
WHERE trxdate BETWEEN '2012-04-01' AND '2012-04-30' 
GROUP BY x, y, z 

由于基于trxdate的表上的索引,它非常快速地返回结果。

对于我们的综合账目,我们需要跨越九家企业集团,所以我的计划是创建一个视图是有效

CREATE VIEW mcomp_gltrxdet_vw AS 
SELECT x, y, z, trxdate, amt 
FROM companydb1..gltrxdet_vw 
    UNION ALL 
SELECT x, y, z, trxdate, amt 
FROM companydb2..gltrxdet_vw 
    UNION ALL 
... 
    UNION ALL 
SELECT x, y, z, trxdate, amt 
FROM companydb9..gltrxdet_vw 
理论上

所以,现在我可以编写一个查询是

SELECT x, y, z, SUM(amt) AS amt_ 
FROM mcomp_gltrxdet_vw 
WHERE trxdate BETWEEN '2012-04-01' AND '2012-04-30' 
GROUP BY x, y, z 

x,y和z是事务性信息字段(在现实中会有更多的这些和WHERE条件传递给查询,但为了说明我希望以上就足够而言更复杂)

我的问题是:在整合结果之前,SQL Server会正确地将WHERE条件应用于底层视图吗?或者,在应用trxdate过滤器之前,它会在构建大型表的过程中搅动很久?在我的表中只有很少的数据,我不确定这个解决方案是否可以正确扩展。我在不同的数据库中查询有什么不同吗?

与此相关的,我敢肯定,一些答复会检查查询计划 - 任何人都可以链接的地方,这些工具可以找到一份像样的教程/如何工作的呢?被扔在与SSMS深端(更多用于MySQL命令行!)

在此先感谢

+1

指南显示图形查询计划:http://msdn.microsoft.com/en-us/library/ms178071%28v=sql.105%29.aspx –

回答

1

基本上,这个工会都在视图模式是什么所谓的(分布式)分区视图和SQL Server有对它的大力支持。查询优化器将处理这个很好。

无论如何,我建议你看看execution plan来确认。我将Ed Harper给出的评论添加到这个答案中,因为这很有帮助。