五大殺手
- 推模式 vs 拉模式:`INSERT INTO Local SELECT * FROM LinkedServer...`(推)遠慢於 `INSERT INTO LinkedServer... SELECT * FROM Local`(拉)。
- 跨服務器 JOIN:大表 JOIN 需搬移海量資料。對策:遠端預先過濾/彙總、用 `REMOTE` JOIN HINT 強制將小表推到遠端。
- 跨服務器 UNION:同樣觸發資料搬移。對策:遠端視圖/預存程序先 UNION 再回傳。
- 過度複雜查詢:優化器無法產生最佳計畫。範例:子查詢遠端聚合導致 10 分鐘 → 拆為變數兩步驟 1 秒(程式碼對比)。
- 同實例仍用 Linked Server:應改用 `Database.dbo.Table` 三部份命名,效能更優。
深層原因:權限導致統計資訊不可見
Linked Server 登入若無 `sysadmin`/`db_owner`/`db_ddladmin`,優化器無法讀取遠端統計資訊,產生劣質計畫。SQL 2012 SP1 起僅需 `SELECT` 權限即可。
架構層面建議
- 發行/訂閱或 Agent 作業同步資料至本地,移除 Linked Server 依賴。
- 權衡:同步延遲 vs 查詢效能、維運複雜度。