数据集比较的效率问题(超超级难题)
AdoDataSet1和AdoDataSet2两个数据集结构一样,主键为字段Ryid,每个库均有2000个以上记录,现要求一个最高效率的算法:比较两个数据集中的记录,如果AdoDataSet1中的记录AdoDataSet2中没有,则把这条记录添加至AdoDataSet2中。 因为数据集来源有些字段不是来自表,不能用SQL语句来比较记录来合并不同值。
我用传统的算法:
var
ls_ryid:string;
i:Integer;
begin
AdoDataSet1.First;
AdoDataSet2.First;
while Not AdoDataSet1.Eof do
begin
ls_ryid:=AdoDataSet1.FieldbyName('Ryid').AsString;
if Not AdoDataSet2.Loacte(Ryid,ls_ryid,[]) then
AdoDataSet2.Append;
for i:=0 to AdoDataSet2.Fields.Count-1 do
AdoDataSet2.Fields[i].value:=AdoDataSet1.Field[i].value;
AdoDataSet1.Next;
end;
end;
这样很慢,原因有3:
1,对AdoDataSet1进行了所有记录的循环。
2,对AdoDataSet2进行了Loacte方法
3,对字段赋值进行了逐一字段的赋值: AdoDataSet2.Fields[i].value:=AdoDataSet1.Field[i].value;
以上是问题所在,
谁能帮忙想想,有提高效率的更好方法吗?