您目前已離線,請等候您的網際網路重新連線

不支援您的瀏覽器

您必須更新瀏覽器,才能使用此網站。

更新至最新版本的 Internet Explorer

在更新連結的伺服器上的表格,然後將資料表聯結到本機伺服器上的表格的 SQL Server 2005 中執行查詢時,效能變慢

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:942982
徵狀
考慮下列案例:
  • 您必須更新連結的伺服器上的表格,然後將資料表聯結到本機伺服器上的表格的查詢。
  • 本機伺服器正在執行 Microsoft SQL Server 2005。
  • 在本機伺服器上,請在 SQL Server 2005 中執行查詢。
在此案例的效能是查詢的緩慢相比較的 Microsoft SQL Server 2000 中相同效能。花,例如您在 SQL Server 2000 中執行查詢時查詢少於 1 秒的時間完成。但是,您在 SQL Server 2005 中執行查詢時查詢需要約 24 秒才能完成。
發生的原因
查詢會連結的伺服器上執行遠端掃描的操作在資料表上。您在 SQL Server 2005 中執行查詢時遠端掃描作業會擷取資料表中的所有資料列。如果表格包含許多資料列,遠端掃描作業就會花很長的時間才能完成。

但是,您在 SQL Server 2000 中執行查詢時遠端查詢作業送出查詢以連結的伺服器上執行。因此,即使該資料表包含許多資料列,遠端掃描作業已在短時間內完成。
其他可行方案
如果要解決這個問題,新增本機伺服器上資料表中的 [UNIQUE 條件約束或 PRIMARY KEY 條件約束]。您要用於 JOIN 操作的欄中加入條件約束。

在下列的步驟 4 的 < 其他相關資訊 > 一節所描述的 DECLARE 陳述式的更新,例如:
DECLARE @t2 table (c1 int primary key, c2 int)
狀況說明
Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。
其他相關資訊

如果要重現這個問題的步驟


附註下列步驟假設您有兩部執行 SQL Server 2005 的伺服器。一個執行個體名稱是 ServerA\SQL2005。其他執行個體名稱是 ServerB\SQL2005。
  1. 在 SQL Server 2005 ServerA 執行個體上, 執行下列陳述式建立的資料庫中 SQL Server 管理 Studio:
    USE MASTERGOIF EXISTS (SELECT * FROM sysdatabases where name = 'LinktestTarget')	DROP DATABASE LinktestTargetGOCREATE DATABASE LinktestTargetGOALTER DATABASE LinktestTarget MODIFY FILE(NAME = 'LinktestTarget', SIZE = 200MB)GOALTER DATABASE LinktestTarget MODIFY FILE(NAME = 'LinktestTarget_log', SIZE = 100MB)GO
  2. 在 SQL Server 2005 ServerB 執行個體上, 執行下列陳述式在管理 Studio 中建立連結的伺服器:
    DECLARE @serverName nvarchar(50)SET @serverName = @@serverNameIF EXISTS (SELECT * FROM master..sysservers WHERE srvname = 'LS')	EXEC master.dbo.sp_dropserver @server=N'LS', @droplogins='droplogins'EXEC sp_addlinkedserver    @server = N'LS',    @srvproduct = N'SQLDB',    @provider = N'SQLOLEDB',    @datasrc = N'ServerA\SQL2005',    @catalog = N'LinktestTarget'EXEC sp_serveroption N'LS', N'data access', N'true'EXEC sp_serveroption N'LS', N'rpc out', N'true'EXEC sp_serveroption N'LS', N'rpc', N'true'EXEC sp_serveroption N'LS', N'use remote collation', N'true'EXEC sp_addlinkedsrvlogin  @rmtsrvname = N'LS',  @useself = N'true',  @locallogin = N'sa'
  3. SQL Server 2005 ServerA 執行個體上, 執行下列陳述式來建立一個資料表,並再填入 50,000 的資料列的資料表:
    USE LinktestTargetGOCREATE TABLE [T1] (	[c1] [int]  NOT NULL,	[c2] [int] NOT NULL,	[c3] char (4000) NOT NULL,	CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED ([c1])WITH FILLFACTOR = 80 ON [PRIMARY] ) ON [PRIMARY]GOSET NOCOUNT ONGODECLARE @counter intSET @counter = 1WHILE @counter < 50000BEGIN	INSERT INTO T1 (c1, c2, c3) VALUES (@counter, @counter,'')	SET @counter = @counter + 1ENDGOUPDATE STATISTICS T1 (PK_t1) WITH FULLSCAN
  4. 在 SQL Server 2005 ServerB 執行個體上, 執行下列陳述式。請注意效能變慢
    DECLARE @t2 table (c1 int, c2 int)INSERT INTO @t2 (c1, c2) VALUES (399990, 399990) UPDATE ASET A.c2 = B.c2FROM LS.LinktestTarget.dbo.T1 AS A 	JOIN @t2 as B on B.c1 = A.c1

警告:本文為自動翻譯

內容

文章識別碼:942982 - 最後檢閱時間:10/23/2007 23:07:31 - 修訂: 1.1

  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • kbmt kbexpertiseadvanced kbtshoot kbprb KB942982 KbMtzh
意見反應
pt" src="https://c.microsoft.com/ms.js">