加入2个SQL Server似乎很慢

时间:2014-05-06 03:55:51

标签: sql sql-server

我在加入2台服务器时遇到问题。 首先,我使用sp_addlinkedserver [10.51.16.222]创建了一个链接服务器。 然后我使用下面的命令进行查询。

 SELECT   drawing.CustomerPN
FROM [10.51.16.222].ascomlogistics.dbo.sale_detail INNER JOIN
[10.51.16.222].ascomlogistics.dbo.wipqtysale ON sale_detail.WQSID = wipqtysale.ID INNER JOIN
[10.51.16.222].ascomlogistics.dbo.wip ON wipqtysale.WID = wip.ID INNER JOIN
[10.51.16.222].ascomlogistics.dbo.drawing ON wip.DID = drawing.ID INNER JOIN
[AscomSPC].[dbo].[log_RunSerial]  ON sale_detail.Sd_Serial =log_RunSerial.WorkSerial
WHERE (AscomSPC.dbo.log_RunSerial.DateTime BETWEEN '2014-05-01' AND '2014-05-05')   AND AscomSPC.dbo.log_RunSerial.Final = '0' AND CustomerPN!='' GROUP BY drawing.CustomerPN

此命令需要13秒。 如果我只使用以下命令查询第二台服务器(10.51.16.222),我很好奇。

select  drawing.CustomerPN
FROM [10.51.16.222].ascomlogistics.dbo.sale_detail INNER JOIN
[10.51.16.222].ascomlogistics.dbo.wipqtysale ON sale_detail.WQSID = wipqtysale.ID INNER JOIN
[10.51.16.222].ascomlogistics.dbo.wip ON wipqtysale.WID = wip.ID INNER JOIN
[10.51.16.222].ascomlogistics.dbo.drawing ON wip.DID = drawing.ID 
 GROUP BY drawing.CustomerPN

此命令只需1-2秒。这让我很困惑,为什么加入2个SQL Server的速度很慢,但如果我只查询第二个服务器似乎是正常的。 我已经尝试过使用索引和存储过程,这样做有点好但仍然很慢。

有没有人有任何想法解决这个问题?

抱歉我的英语不好。我尽我所能。

提前感谢您的答案

2 个答案:

答案 0 :(得分:6)

如果要在两个单独的服务器之间连接表,则优化器不在图中。它不再具有快速查询所需的信息

  • 可用的索引
  • 各自的桌子有多大?
  • 连接列上的值分布是什么?

使用远程连接,优化器只知道列名称和类型。并且运行查询的服务器可能必须通过线路发送整个表以允许正确的连接逻辑。

答案 1 :(得分:0)

此处的问题是用户在远程服务器上没有足够的权限来查看统计信息。

要解决此问题,您可以升级到SQL Server 2012 SP1(用于远程服务器)或为用户提供足够的权限:“用户必须拥有该表或者是sysadmin固定服务器角色的成员,db_owner固定数据库角色,或者在链接服务器上的db_ddladmin固定数据库角色。“

更多信息:

http://msdn.microsoft.com/en-us/library/ms175129.aspx

在这里:

http://connect.microsoft.com/SQLServer/feedback/details/695640/dbcc-show-stati-stics-requires-elevated-priviledges

在这里:

http://sqlblog.com/blogs/linchi_shea/archive/2010/11/22/linked-servers-permissions-and-distributed-query-performance.aspx