2014-03-06 49 views
0

我正在優化視圖的性能,收集2個鏈接服務器對象上的數據。SQL Server鏈接服務器性能似是而非的解決方案?

所以看法是服務器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 

我知道這個查詢不是mak任何意義..這只是爲了說明我的觀點。

在服務器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 
+0

我在tsql中看不到'[ServerB]'或'[ServerC]'。我錯過了什麼嗎? – DMason

回答

0

一個很好的解決方案在這裏我看來,將查詢您所需要的數據,並將其拖放到一個臨時表,然後進行臨時表之間的同一臺服務器上加入。

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

通過在第一拉低數據,然後做本地加盟,你會看到在性能上巨大的進步。嘗試從服務器連接到服務器的速度非常緩慢,因爲在連接期間網絡滯後。