1

我需要通过一条带宽非常低的线路从各种表中提取大量数据。我需要尽量减少来回发送的数据量。

那边是 Sybase 数据库,这边是 SQL Server 2008。

我需要的是从 Sybase 数据库中提取与该办公室有关的所有表。假设我有以下表格作为示例:

Farm 
Tree 
Branch 
etc.

(一个农场有很多树,一棵树有很多树枝等)

假设“农场”表有一个名为“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_Treeand vw_Branch)或多或少地保证 SQL Server会将外部表的所有数据提取到本地临时表中,然后将其与内部查询的结果相匹配。

问题是 SQL Server 无法访问链接服务器的表统计信息,因此无法就如何优化查询做出有意义的决定。

如果您想确保在 Sybase 服务器上完成工作,最好的办法是在 Sybase 端编写代码(可以是视图或存储过程)并从 SQL Server 引用它们。

以我的经验,链接的服务器连接在脆弱的网络上并不是特别有弹性。如果可用,您可以考虑使用集成服务而不是链接服务器查询——但即使这样也不会好多少。您可能需要考虑使用robocopybcp移动文本文件。

于 2011-02-15T10:18:07.560 回答