我正在创建一个工具,它将两个数据库作为输入,比较表并在表中显示“仅数据的差异”。
例如,
来源数据库 - 人,订单(两个表)
目的地数据库 - 人员,订单(两个表)
现在,我的应用程序将源数据库中的Person与目标数据库中的Person进行比较,并仅显示源Person中而不是目标Person中的那些记录。
这是我的方法 -
我的问题:有没有更好/更有效的方法来实现这一目标?
迭代整个数据库是效率最低的解决方案。
答案 0 :(得分:1)
通常最好将工作推入数据库。为每对表生成FULL OUTER JOIN
查询以计算服务器上的差异。到目前为止 比将所有数据传输到客户端更快
特别是数据表等效率不高。
另一种方法是行排序的请求,并在两个结果流上执行内存中的合并连接。您可以找到有关如何在Web上合并两个已排序流的示例代码。
答案 1 :(得分:1)
通常,您希望尽可能多地在数据库中进行处理。对于要读取表的全部内容的处理尤其如此。关系数据库是为这种类型的处理而设计的。
如果两个数据库都在同一台服务器上,那么您可能会有这样的查询来获取源中不在目标中的人员记录:
select s.*
from source..person
except
select d.*
from destination..person;
这种方法的优点是什么?
如果它们不在同一台服务器上,则可以使用链接服务器连接服务器。 documentation是了解如何使用链接服务器的好地方。如果服务器使用不同的数据库,这甚至可以工作。