更新庞大的SQLite数据库

时间:2014-02-04 12:10:46

标签: c# sql sqlite

我有两个非常庞大的SQLite个表(里面有几何数百万行)。第一个是不改变(记录不更新等)。第二个更新(旧记录可以更新/删除,可以添加新记录)。

我不时需要使用第二个表更新第一个表。因为它是如此大量的数据,我必须检测第二个表中所做的更改并将它们应用到第一个表中。我也不能在RAM中这样做,因为表包含几何形状,它们可能非常重。

实现这一目标的可能方法是什么?

1 个答案:

答案 0 :(得分:1)

简单解决方案:删除第一个表,然后使用表达式

drop table table1;
create table table1 as select * from table2;

更复杂的解决方案:使用一对移动的“游标” - 不是Oracle中的数据库游标,而只是一些包含表PK值的变量。 将两个游标都设置为两个表中的最低ID。然后,只需遵循简单的规则:

  1. 如果table1中的记录存在于table2中且相同,则跳过,前进两个游标
  2. 如果table1中的记录存在于table2中且不相同,则更新table1中的记录,前进两个游标
  3. 如果table2中的记录不存在于table2中,请将其删除,提前执行table1游标
  4. 如果table1中的记录不存在于table1中,请插入它,advance table2 cursor
  5. 通过这种方式,您可以获得具有O(1)内存要求的线性O(N)算法(不考虑数据库操作的复杂性)。