【问题标题】:Efficient way to avoid inserting duplicate records避免插入重复记录的有效方法
【发布时间】:2014-05-07 13:16:38
【问题描述】:

从一个数据库插入到另一个数据库的场景:

假设我在 db1 中有 100,000 条记录,我正在从数据库 db1 中选择一批记录,然后 将其插入另一个数据库 db2。通过选择一批记录,我的意思是我选择了 1000 条记录 一次。下次,我运行相同的查询来选择另一批 1000 条记录,我想从 记录号 1001 作为之前的所有记录 1000 条记录从第 1 行开始 插入db2。

所以,基本上,第二次,我想避免再次复制相同数量的记录,以避免 数据库 db2 中的重复记录。

为了避免插入重复记录,我现在遵循的一种方法是, 我的数据库 db1 中有一个名为 flag 的整数值列,其值为负值,例如 -1 并且尽快 当我抓取 1000 条记录时,我将值更新为正值,即 +1。于是,第二次 我将运行查询以获取下一组 1000 条记录,它将从记录 #1001 开始。

我想知道这是否是一种有效的方法,因为每次我运行查询时,我的查询都会检查 db1 中的所有记录从一开始就开始,然后最终开始从它所在的位置获取数据 会注意到标志列中负值的开始。请建议是否有更有效的 接近。

P.S:我正在使用 JDBC 来获取记录并将其插入到另一个数据库中。

谢谢

【问题讨论】:

    标签: database


    【解决方案1】:

    我不会仅仅为了这个目的而更新 db1 中的表。

    出于控制目的,我宁愿在 db1 中创建另一个表,或者更好地在 db2 中创建另一个表。

    这样您就不需要处理 db1 中原始表中的写访问权限和/或竞争、冲突或多用户冲突条件。

    第二个表将记录每次提取的时间戳、涉及的表、提取的范围、用户名、进程名...以及您可能感兴趣的任何其他控制信息。

    【讨论】:

    • :这个方法是不是比我说的要消耗更多的时间?
    • 不要尝试过早优化,因为""我们应该忘记小的效率,比如说大约 97% 的时间:过早优化是一切的根源邪恶” --Donald Knuth--en.wikipedia.org/wiki/Donald_Knuth
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多