假设存在product表
ID,NAME两列。ID为主键。现在数据库中有10万条记录,每天有10万条记录来更新,每条记录代表的是product。新的10万条记录中,有的product是数据库中不存在的,需要insert,有的product是已存在的,需要update,数据库中的有的product是不需要了,需要delete。如何完成操作最高效?目前的想法:
对于删除操作,
首先获取数据库中product的id,然后遍历新的所有product,将不存在的id对应的product从数据库中删除。删除操作先获得所有id,然后用DELETE FROM … WHERE … OR …以减少访问数据库的次数。
对于update和insert还没有想到什么太好的方法,也只能一条条记录来操作。不知道大家有没有什么好的建议?
ID,NAME两列。ID为主键。现在数据库中有10万条记录,每天有10万条记录来更新,每条记录代表的是product。新的10万条记录中,有的product是数据库中不存在的,需要insert,有的product是已存在的,需要update,数据库中的有的product是不需要了,需要delete。如何完成操作最高效?目前的想法:
对于删除操作,
首先获取数据库中product的id,然后遍历新的所有product,将不存在的id对应的product从数据库中删除。删除操作先获得所有id,然后用DELETE FROM … WHERE … OR …以减少访问数据库的次数。
对于update和insert还没有想到什么太好的方法,也只能一条条记录来操作。不知道大家有没有什么好的建议?
insert into db1.tblOrder a select * from db2.tblOrder b on duplicate key update a.f1=b.f1;
REPLACE 的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
这样的话,你原表中需要添加一个字段 FLAG int1. update product表 set FLAG=1;
2. foreach (row in 内存)
INSERT INTO product表 (id,name,flag) VALUES (1,2,0) ON DUPLICATE KEY UPDATE name=VALUES(name),FLAG=0;
3. delete from product表 where FLAG=1;
效率上比你自己先判断再插入或更新要高。
你可以参考一下手册中的详细说明
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html