如何在不影响生产环境的情况下比较oracle中两个大表的数据

how compare data between two large tables in oracle without affecting production environment

我在比较来自两个大表的数据时遇到问题。

场景:

问题:我必须找出存储在 oracle DB 中的表中并在其上运行 siebel 应用程序的两组数据之间的差距。我不能简单地对整个数据集(8,000,000 行)使用 select 语句,这会影响应用程序的性能。

我现在做了什么:

简单地将光标放在一组数据上并将我的逻辑与另一组数据进行比较,并根据逻辑在其他表中插入间隙,但在此解决方案中,它一次比较一行,这是非常缓慢的过程并且一段时间后超时。

任何人都可以提出比这更好的解决方案,以便它可以加快进程非常感谢您的帮助。

根据具体的用例,可以采用多种不同的方法来提高性能。根据您提供的信息,以下是一些可能有效的方法。

  1. 使用 'minus' 或 'not exists' 重写查询。

  2. 在 where 子句中使用的列上创建索引。请注意,索引创建会耗费时间和资源并影响系统,因此建议在服务器负载较低时执行此操作。如果索引已经存在且未被使用,请尝试使用提示。

  3. 如果这些表中的数据是静态的,请尝试在测试环境中复制表并运行进行适当的测试。

在 800 万行上使用游标听起来效率不高,除非这是唯一的方法。

如果你能提供更多的细节,我们或许能给出更好的建议。