Sql-Server

SQL Server Linked Server 性能:為什麼遠端查詢如此昂貴?

  • November 7, 2018

我有兩個數據庫伺服器,通過連結伺服器連接。兩者都是 SQL Server 2008R2 數據庫,連結伺服器連接是通過正常“SQL Server”連結建立的,使用目前登錄的安全上下文。連結的伺服器都在同一個數據中心,所以連接應該不是問題。

我使用以下查詢來檢查列identifier的哪些值可以遠端使用,但不能在本地使用。

SELECT 
   identifier 
FROM LinkedServer.RemoteDb.schema.[TableName]

EXCEPT

SELECT DISTINCT
   identifier 
FROM LocalDb.schema.[TableName] 

兩個表上的列都是非聚集索引identifier。本地大約有 260 萬行,遠端只有 54 行。然而,在查看查詢計劃時,70% 的執行時間用於“執行遠端查詢”。此外,在研究完整的查詢計劃時,估計的本地行數是1而不是2695380(這是僅選擇後面的查詢時估計的行數EXCEPT)。 執行計劃 執行此查詢時,確實需要很長時間。

這讓我想知道:這是為什麼呢?估計是“剛剛”,還是連結伺服器上的遠端查詢真的那麼昂貴?

你目前的計劃對我來說似乎是最優化的計劃。

我不同意其他答案中關於它將 260 萬行發送到遠端伺服器的斷言。

在我看來,該計劃好像對於從遠端查詢返回的 54 行中的每一行,它都在對本地表執行索引查找以確定它是否匹配。這幾乎是最佳計劃。

考慮到表的大小,用散列連接或合併連接替換會適得其反,而添加中間#temp表只會增加一個額外的步驟,這似乎不會給您帶來任何優勢。

引用自:https://dba.stackexchange.com/questions/10873