2012-06-01 154 views
6

女士們和男士們 -不在SQL Server中使用鏈接服務器的原因?

我正在和一個曾經建議在SQL Server中使用鏈接服務器(Informix)的人一起工作。

他們發現(原因不明),他們有連接到SQL客戶端工具和SQL Server代理SQL statments更好的運氣到Informix然後直接在Informix的指向客戶端工具。我的想法當然是「解決客戶端問題> Informix連接問題,不要使用黑客攻擊」 - 但這不僅僅是重點,而且可能不會由您真正商量。

話雖這麼說,什麼是這種方法的在性能方面的危險?

  • 所有的查詢將命中Informix的一個數據庫,我們不會需要做 本地SQL表和Informix之間的異類聯接。 SQL 服務器字面上的作用僅僅是代理/數據泵。
  • 大部分正在執行的查詢也會做相當數量的 的分組和彙總,所以(幸運的是)我們不會在箱子之間移動噸數 。

我的問題:

任何人都可以識別場景中一個「GROUP BY」的問題在SQL Server的發射會導致個人,顆粒狀行返回到SQL Server和聚集與Informix上?就我而言,這是一個啓示。

還有沒有其他的(壞的)性能影響,在這種情況使用鏈接的服務器,我應該知道的(和試圖簡化解決方案的方式來使用,去客戶端>的Informix)?

謝謝!

回答

8

如果您是直接從SQL Server的形式使用鏈接服務器上的查詢:

SELECT Col1, col2, col3, SUM(col4) 
FROM LinkedServer.Database.schema.Table 
GROUP BY Col1, col2, col3 

然後,它會執行SQL Server上的聚合。但是如果你使用OPENQUERYOPENROWSET,那麼它將鏈接服務器上進行查詢,然後檢索數據到SQL Server:

SELECT * 
FROM OPENQUERY(LinkedServer, ' 
SELECT Col1, col2, col3, SUM(col4) 
FROM Database.schema.Table 
GROUP BY Col1, col2, col3') 
+0

哦,孩子!讓我說清楚。在方案1中,滿足WHERE子句條件的* all *行從Informix流向SQL Server以進行聚合。在情景2中,這一切都發生在Informix上,只有「答案」數據集回來。這可能是我需要的子彈! –

+0

@RussellChristopher - 是的,這就是我所說的(雖然我不確定它是否執行informix或SQL Server上的WHERE)。無論如何,你仍然需要你的鏈接服務器,但是如何使用它會產生巨大的影響 – Lamak

+0

使用OPENQUERY會產生巨大的差異,歡呼聲。我也有不得不鏈接到古老的Informix服務器(v7.23C1)的不幸。 – akiller