如何在不影响生产环境的情况下比较oracle中两个大表的数据
how compare data between two large tables in oracle without affecting production environment
我在比较来自两个大表的数据时遇到问题。
场景:
问题:我必须找出存储在 oracle DB 中的表中并在其上运行 siebel 应用程序的两组数据之间的差距。我不能简单地对整个数据集(8,000,000 行)使用 select 语句,这会影响应用程序的性能。
我现在做了什么:
简单地将光标放在一组数据上并将我的逻辑与另一组数据进行比较,并根据逻辑在其他表中插入间隙,但在此解决方案中,它一次比较一行,这是非常缓慢的过程并且一段时间后超时。
任何人都可以提出比这更好的解决方案,以便它可以加快进程非常感谢您的帮助。
根据具体的用例,可以采用多种不同的方法来提高性能。根据您提供的信息,以下是一些可能有效的方法。
使用 'minus' 或 'not exists' 重写查询。
在 where 子句中使用的列上创建索引。请注意,索引创建会耗费时间和资源并影响系统,因此建议在服务器负载较低时执行此操作。如果索引已经存在且未被使用,请尝试使用提示。
如果这些表中的数据是静态的,请尝试在测试环境中复制表并运行进行适当的测试。
在 800 万行上使用游标听起来效率不高,除非这是唯一的方法。
如果你能提供更多的细节,我们或许能给出更好的建议。
我在比较来自两个大表的数据时遇到问题。
场景:
问题:我必须找出存储在 oracle DB 中的表中并在其上运行 siebel 应用程序的两组数据之间的差距。我不能简单地对整个数据集(8,000,000 行)使用 select 语句,这会影响应用程序的性能。
我现在做了什么:
简单地将光标放在一组数据上并将我的逻辑与另一组数据进行比较,并根据逻辑在其他表中插入间隙,但在此解决方案中,它一次比较一行,这是非常缓慢的过程并且一段时间后超时。
任何人都可以提出比这更好的解决方案,以便它可以加快进程非常感谢您的帮助。
根据具体的用例,可以采用多种不同的方法来提高性能。根据您提供的信息,以下是一些可能有效的方法。
使用 'minus' 或 'not exists' 重写查询。
在 where 子句中使用的列上创建索引。请注意,索引创建会耗费时间和资源并影响系统,因此建议在服务器负载较低时执行此操作。如果索引已经存在且未被使用,请尝试使用提示。
如果这些表中的数据是静态的,请尝试在测试环境中复制表并运行进行适当的测试。
在 800 万行上使用游标听起来效率不高,除非这是唯一的方法。
如果你能提供更多的细节,我们或许能给出更好的建议。