100分求快速比较记录的算法
在《语言算法》那个版发了帖,没人理,100分在这里求好方法。
我有一个表TABLE用来记录居民信息,结构如下:
aid:居民街道号
id:居民身份证号——数据库中唯一
pid:父亲身份证号name:姓名
sex:性别——0或1表示male或female
birth:出生日期
additional_info:附加信息
现在已经有大量数据插入数据库,而手上有一个csv的数据文件,数据都是按照表结构排列。
我需要检查数据文件中的每条记录,去跟数据库中的记录对比看文件中各记录的每个字段有没有变化或被修改。
比如csv文件中的一条记录是:
aid:4
id:4030203
pid:34329223
name:alex
sex:male
birth:1980-8-4
additional_info:mmmmm
我要查找数据库的TABLE,检查aid,id,pid,name等字段的信息有没有被修改,如果任意两个字段信息都被修改则把该记录当做新记录插入数据库,如果只有一个字段信息不匹配则在数据库中修改该字段数据为csv文件中的值。我采取的方法是:
1:先对csv文件按找sex排序
2:从csv中读取第一条记录,得到它的sex字段,假如为male
3:select * from TABLE where sex=male order by id;
4:根据从csv中读取的记录的id,在3步中返回的记录集中二分法查找
5:查到该id对应的记录后,分别判断其aid,pid,name等信息是否被修改,如果多于一个字段被修改,则把该记录插入数据库
6:如果没有查到该id对应的记录,就用TADOQuery.Locate(Aid,pid,name)定位。
7:如果Locate返回真,则说明只有id被修改,否则把该记录添加进数据库。
我在SQL Server2000上做,BDS2006,11000条记录吧,做一次完整的audit需要35分钟左右,有没有更好的办法?
恳请高手不要太吝啬,对于好算法可以再开帖加分。