2011-02-14 50 views
1

我需要通過具有非常低帶寬的線路從各種表中提取大量數據。我需要最大限度地減少來回發送的數據量。SQL Server 2008,Sybase - 通過低帶寬進行大量選擇查詢

在那一邊是Sybase數據庫,此方SQL Server 2008的

我需要做的是把所有從Sybase數據庫有這個辦公室做表上。可以說,我有以下表爲例:

Farm 
Tree 
Branch 
etc. 

(一個農場有許多樹木,一棵樹有許多分支等)

讓說的「農場」表有一個稱爲「CountryID場「,並且我只想要國家ID = 12的數據。我所看到的實際表結構非常複雜(我對它們也不是很熟悉),所以我想盡量保持查詢的簡單性。

所以我想設立了一系列的意見:

CREATE VIEW vw_Farm AS 
SELECT * from Farm where CountryID=12 

CREATE VIEW vw_Tree AS 
SELECT * from Tree where FarmID in (SELECT FarmID FROM vw_Farm) 

CREATE VIEW vw_Branch AS 
SELECT * from Tree where BranchID in (SELECT BranchID FROM vw_Branch) 

爲了再拉實際數據通過我會再做:

SELECT * from vw_Farm into localDb.Farm 
SELECT * from vw_Tree into localDb.Tree 
SELECT * from vw_Branch into localDb.Branch 

等。

設置簡單。我想知道這將如何執行?它會執行Sybase方面的所有SELECT語句,然後只發回結果嗎?另外,由於這將是一個迭代過程,是否有可能爲隨後的調用索引視圖?

任何其他優化建議也將受到歡迎!

感謝
卡爾

編輯:只是爲了澄清,該意見將在SQL Server中設置。我正在使用Sybase ASE的鏈接服務器來設置這些視圖。特別讓我擔心的是,視圖是在SQL Server中而不是在這一邊的Sybase上,這意味着對於每次迭代,來自前視圖的數據將在計算之前首先被傳遞到SQL Server得到執行。我希望Sybase能夠完成所有的計算,並將結果傳遞給所有人。

回答

2

沒有經過測試就很難確定,但我有點相關的經驗(使用鏈接服務器到Sybase以外的平臺和SQL Server 2005)一直使用子查詢(例如您的代碼爲vw_Treevw_Branch)更多或更少保證SQL Server將外部表的所有數據都拉到本地臨時表中,然後將其與內部查詢的結果進行匹配。

問題是SQL Server無法訪問鏈接服務器的表統計信息,因此可能無法做出有關如何優化查詢的有意義的決定。

如果你想確保在Sybase服務器上完成工作,最好的辦法是在Sybase端編寫代碼(可以是視圖或存儲過程),並從SQL Server中引用它們。

根據我的經驗,鏈接服務器連接在片狀網絡上不是特別有彈性。如果可用,您可以考慮使用集成服務而不是鏈接服務器查詢 - 但即使這樣也不會好得多。您可能需要考慮使用robocopybcp回退移動的文本文件。

+0

嗨,Ed。你的回答中有很多壞消息,但它給了我需要找到解決方法的信息。非常感謝 – Karl 2011-02-16 06:55:51