WHERE在多个数据库的其他视图上使用UNION ALL的条件

时间:2012-06-26 09:57:51

标签: sql sql-server-2008-r2

我有九个不同的数据库代表公司,所有这些数据库都在同一台SQL Server 2008机器上。

在每个公司数据库中,都有一个名为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 个答案:

答案 0 :(得分:1)

基本上,视图中的union-all模式是所谓的(分布式)分区视图,SQL Server对它有很大的支持。查询优化器将处理这个问题。

无论如何,我建议您查看execution plan以确保。我在这个答案的评论中添加了Ed Harper给出的链接,因为它很有帮助。