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个表,所以我将它们联合起来获取记录。总数据总计超过36 crores(3.6百万),这会影响数据库执行时间和检索记录的能力。有人可以帮助我如何优化这一点。或任何其他解决方案。
答案 0 :(得分:0)
Union
,而是可以使用Union all
并最终删除
重复记录(如果有的话)。答案 1 :(得分:0)
首先,您需要在桌面上使用covering index。因此,如果您没有,则已在所有表上创建此索引:
CREATE NONCLUSTERED INDEX IX_Table1_party_code__date
ON server1.table1 (party_code) INCLUDE (date)
其次,将UNION
替换为UNION ALL
运算符。如果您需要单独保留每个服务器的记录,Union会对您不需要的数据集进行排序和比较。
如果这样做不够,也许您可以查看其他一些选项:
也许您可以先UNION ALL
所有记录(在流程中添加ServerID
列),然后在数据集上执行一个GROUP BY
(在party_code
上ServerID
),但我无法确定无论这种情况会更好还是更糟(你必须进行测试)。
尝试使用indexed views.
将在晚上计算和填充的临时表?