[英]SQL Server Linked Server Performance plausible solution?
我正在优化一个视图的性能,该性能在2个链接的服务器对象上收集数据。
因此,该视图位于服务器A上。该视图从服务器B和C中选择数据。
当我打开脚本时,我注意到此视图是一遍遍的查询,一遍又一遍地使用sub sub sub select多次查询相同的表...
为简单起见,我不会发布查询的实际代码(超过700行),但会创建一个简单的查询供您理解:
SELECT *
FROM [ServerA].myDB.dbo.tableA a
INNER JOIN [ServerA].myDB.dbo.tableB b ON a.field = b.field
LEFT JOIN ( SELECT SUM(field) AS mysum
FROM [ServerA].myDB.dbo.tableB
WHERE field IN ( SELECT MAX(value)
FROM [ServerA].myDB.dbo.tableA
WHERE anotherField IS NOT NULL )
) tbl ON tbl.mysum < b.anotherField
我知道此查询没有任何意义。.这只是为了说明我的观点。
使用SELECT * FROM ServerA.myDB.myLocalView在服务器A上的myDB中创建视图以查询表以及从服务器B中创建视图的性能更高吗?
CREATE VIEW myLocalView
AS
SELECT *
FROM dbo.tableA a
INNER JOIN dbo.tableB b ON a.field = b.field
LEFT JOIN ( SELECT SUM(field) AS mysum
FROM dbo.tableB
WHERE field IN ( SELECT MAX(value)
FROM dbo.tableA
WHERE anotherField IS NOT NULL )
) tbl ON tbl.mysum < b.anotherField
我认为这里的一个好的解决方案是查询所需的数据并将其放入临时表中,然后在同一服务器上的临时表之间进行联接。
https://www.simple-talk.com/sql/t-sql-programming/temporary-tables-in-sql-server/
通过首先提取数据,然后在本地进行连接,您将看到性能上的巨大改进。 由于连接期间的网络延迟,尝试从服务器到服务器的连接非常慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.