Sql-Server
SQL Server Linked Server 性能:為什麼遠端查詢如此昂貴?
我有兩個數據庫伺服器,通過連結伺服器連接。兩者都是 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
表只會增加一個額外的步驟,這似乎不會給您帶來任何優勢。