透過連結伺服器查詢 Oracle:
SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME WHERE COLUMN1 = @SID;
執行計畫顯示:**遠端掃描無 WHERE 條件**,全表資料傳回本地後才篩選(出現 Filter 運算子),導致超時。
SQL Server 查詢優化器無法確定遠端統計資訊,預設將完整資料集拉回本地再篩選,無法利用遠端索引。
OPENQUERY 可將完整查詢下推遠端執行,但**不支援參數**。解法:動態拼接 SQL 字串。
DECLARE @sql NVARCHAR(MAX), @sid VARCHAR(50) = 'S12345';
SET @sql = 'SELECT * FROM OPENQUERY(LINKED_NAME,
''SELECT * FROM ACCOUNT_NAME.TABLE_NAME WHERE COLUMN1 = ''''' + @sid + ''''''')';
EXEC sp_executesql @sql;
或使用預存程序封裝動態 SQL。
執行計畫顯示 **遠端查詢已包含 WHERE 條件**,回傳列數大幅減少,耗時從超時降至毫秒級。