SQL Server链接服务器性能合理的解决方案?

时间:2014-03-06 17:22:22

标签: sql-server

我正在优化视图的性能,以收集2个链接服务器对象的数据。

所以视图在服务器A上。 该视图从服务器B和C中选择数据。

当我打开脚本时,我注意到这个视图总是乱七八糟地使用子子子选择一遍又一遍地查询相同的表......

为了简单起见,我不会发布查询的实际代码(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

我知道这个查询没有任何意义..这只是为了说明我的观点。

在服务器A上的myDB中创建一个视图以使用SELECT * FROM ServerA.myDB.myLocalView查询表和服务器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

1 个答案:

答案 0 :(得分:0)

在我看来,一个很好的解决方案是查询所需的数据并将其放入临时表中,然后在同一服务器上的临时表之间进行连接。

https://www.simple-talk.com/sql/t-sql-programming/temporary-tables-in-sql-server/

通过首先提取数据,然后在本地进行连接,您将看到性能的巨大提升。由于加入期间网络滞后,尝试从服务器加入服务器非常慢。