-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