-1
我在SQL Server數據庫和鏈接服務器數據庫(Sybase ASA,Oracle或Ingres,取決於指定的鏈接服務器)之間進行數據比較。提高EXCEPT語句的性能
我有一個遊標,循環遍歷每個數據庫中的所有表,並做一個except。
OPEN MY_Cursor;
FETCH NEXT FROM MY_Cursor INTO @TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM OPENQUERY([LINKEDSERVER],'SELECT * FROM @TableName')
EXCEPT
SELECT * FROM @TableName
IF @@ROWCOUNT <> 0
BEGIN
PRINT @TableName
END
FETCH NEXT FROM My_Cursor INTO @TableName
END
這是進行全表掃描,並且在所有行進行比較之前不返回結果。由於其中一些表格有數百萬行,因此需要很長時間。
執行計劃表明大約95%的性能問題出現在遠端。不幸的是,我沒有權限在鏈接的服務器數據庫上創建索引或索引視圖。
只要發現有數據差異的任何記錄,是否有可能中斷except語句並進入下一次遊標迭代?
您是否嘗試過使用'EXISTS'?假設您只想檢測差異並不返回任何行。 – HABO
您正在選擇沒有謂詞的'*'。什麼索引?什麼「表現」? –
真的,您已將服務器Sybase ASA,Oracle或Ingres與相同的表名,列名,數據類型以相同的順序關聯起來。 – Paparazzi