1

帯域幅が非常に狭い回線を介して、さまざまなテーブルから大量のデータを取得する必要があります。あちこちに送信されるデータの量を最小限に抑える必要があります。

そちら側は Sybase データベースで、こちら側は SQL Server 2008 です。

必要なのは、このオフィスに関係するすべてのテーブルを Sybase データベースから取得することです。例として、次のテーブルがあるとします。

Farm 
Tree 
Branch 
etc.

(1 つの農場には多くの木があり、1 つの木には多くの枝があるなど)

「Farm」テーブルに「CountryID」というフィールドがあり、CountryID=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 にすべての計算を実行させ、結果を渡すだけにしてもらいたいのです。

4

1 に答える 1

2

テストなしで確実にすることは困難ですが、私のある程度関連する経験 (Sybase 以外のプラットフォームへのリンク サーバーを使用し、SQL Server 2005 で) では、サブクエリ ( および のコードなど) を使用するvw_Treevw_Branch、多かれ少なかれ SQL Server が外部テーブルのすべてのデータをローカル一時テーブルにプルし、それを内部クエリの結果と照合します。

問題は、SQL Server がリンク サーバーのテーブル統計にアクセスできないため、クエリを最適化する方法について意味のある決定を下すことができないことです。

Sybase サーバーで確実に作業を完了させたい場合は、Sybase 側でコード (ビューまたはストアド プロシージャ) を記述し、それらを SQL Server から参照することをお勧めします。

私の経験では、リンクされたサーバー接続は、不安定なネットワークでは特に回復力がありません。利用可能な場合は、リンク サーバー クエリではなく Integration Services の使用を検討できますが、それでもそれほど優れているとは言えません。robocopybcpを使用してテキスト ファイルを移動することを検討する必要がある場合があります。

于 2011-02-15T10:18:07.560 に答える