【问题标题】:View over several databases, how to improve speed ?查看多个数据库,如何提高速度?
【发布时间】:2013-05-03 11:16:42
【问题描述】:
我有三个数据库,每个数据库中有两个表,为了使用户界面更容易我已经创建了这 6 个表的视图,并为数据库和表添加了视图中的一列,这样用户仍然可以过滤他/她是否只想要某些数据。但是我觉得性能没有想象中那么好。我觉得即使 where 子句定义了例如来自 db1 的数据不是必需的,视图也会首先获取所有数据并执行过滤。在这种情况下,如何使视图足够智能以避免从 db1 获取数据?
【问题讨论】:
标签:
performance
tsql
sql-server-2012
【解决方案1】:
你想要的是一个分区视图。
您通过为视图中的每个表指定约束来创建这些,因此 sql server 将知道那里有哪些信息而无需获取它:
即
-- On Server1:
CREATE TABLE Customers_33
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 1 AND 32999),
... -- Additional column definitions)
-- On Server2:
CREATE TABLE Customers_66
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 33000 AND 65999),
... -- Additional column definitions)
-- On Server3:
CREATE TABLE Customers_99
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 66000 AND 99999),
... -- Additional column definitions)
这里有完整的解释:http://msdn.microsoft.com/en-us/library/aa933141(v=sql.80).aspx