3
SELECT party_code , max(date) AS date    FROM     
server1.table1 WITH (nolock) GROUP  BY party_code    

UNION    
SELECT party_code , max(date) AS date   FROM     
server2.table1 WITH (nolock) GROUP  BY party_code    

UNION    
SELECT party_code , max(date) AS date    FROM     
server3.table1 WITH (nolock) GROUP  BY party_code 

如上所示,我在不同的服务器上有类似的 17 个表,所以我将它们合并以获取记录。总数据总计超过3.6亿(3.6 亿),这会影响数据库执行时间和检索记录的能力。有人可以帮助我如何优化它。或任何其他解决方案。

4

2 回答 2

0
  1. 不要使用Union,而是可以使用Union all并最终删除重复记录(如果有)。
  2. 在 stage(temp) 表中插入所有记录,最后删除重复记录(如果有)。
  3. 如果记录数量很大,您可以通过 SSIS 加快处理速度
于 2013-07-23T10:47:54.633 回答
0

首先,您需要在您的表上建立一个覆盖索引。因此,如果您没有它已经在所有表上创建此索引:

CREATE NONCLUSTERED INDEX IX_Table1_party_code__date 
  ON server1.table1 (party_code) INCLUDE (date)

二是UNIONUNION ALL运营商代替。如果您需要分别保存来自每个服务器的记录,Union 会对您不需要的数据集进行排序和比较。

如果这还不够,也许您可​​以查看其他一些选项:

  • 也许您可以首先UNION ALL记录所有记录(在此过程中添加ServerID列),然后GROUP BY在数据集上执行一个(onparty_codeServerID),但我无法确定这会更好或更坏(您必须进行测试)。

  • 尝试使用索引视图。

  • 将在夜间计算和填充的临时表?

于 2013-07-23T10:55:06.027 回答