从内部部署到Azure的SQL Server跨数据库查询



两个SQL Server

  1. 内部部署
  2. Azure

当我运行T-sql 时

  1. 仅限内部部署

从订单中选择前100*

结果和往常一样快。

  1. 仅限Azure

从Orders_2 中选择前100*

同样,快速。

  1. 这就是重点。不管我用什么";链接服务器";或";开放数据源">

从订单中选择前100*左外JOIN

[AUREDB].DB01.dbo.Orders_2 a2 ON a2.ID=a.ID

OR

从订单中选择前100*左外部联接
OPENDATASOURCE('QLOLEDB','DataSource=AzureDB;用户ID=XXX;密码=XXX'(。DB01.dbo.Orders_2 a2打开a2。ID=a.ID

这需要很长时间,大约15分钟。发生了什么事?以及如何修复?

因为它需要将整个表从远程服务器拉到本地服务器,然后执行TOP 100。如果您查看尚未显示的查询计划,您将看到正在发生的情况。

相反,在加入之前先过滤远程服务器的数据。

Select
*
from Orders a
LEFT OUTER JOIN (
SELECT TOP (100)
*
FROM [AZUREDB].DB01.dbo.Orders_2
) a2 ON a2.ID = a.ID

我不知道这是否能达到预期的效果,因为你还没有展示出你想要的。

另一种选择是确保远程服务器的表在ID上有一个索引(可能是集群的(。这意味着,希望您的查询可以将100行从自己的服务器传递到远程服务器,以便将其连接起来。