为什么远程表的连接速度如此之慢?

时间:2013-10-02 23:28:54

标签: sql sql-server sql-server-2008 remote-server

想象一下,我有这个问题:

SELECT L.id, L.name, R.phone
FROM users L
JOIN [remoteServer].[dbo].[phoneNumbers] R ON R.fk_id=L.id
WHERE L.id=12345

在SQL Server 2008中,如果我显示执行计划,我会看到我的本地SQL服务器查询整个远程表(SELECT id, phone FROM [remoteServer].[dbo].[phoneNumbers]),然后在本地应用过滤器。

为什么不查询已过滤的远程表(SELECT id, phone FROM [remoteServer].[dbo].[phoneNumbers] WHERE id=12345),因为只会使用与id匹配的记录?

我想我的问题是:我怎么能这样做,因为默认情况下SQL Server没有这样做?

2 个答案:

答案 0 :(得分:1)

我对链接服务器的观察是,当您使用此语法时

server.database.schema.table

检索该表的全部内容。之后进行任何过滤。

解决方案是使用openquery。

答案 1 :(得分:0)

本地实例对外部对象的结构没有任何线索。这就像进入一个黑匣子,并要求你从一张桌子上找回所有“史密斯”。你不知道从哪里开始,所以你先把它全部拿出来,这样你就可以查看整个表格。