一万条数据,之前采用一条一条更新,用时将近80s。上网搜了一下,大致有2种方法:
1. 使用replace into或者insert into ... on duplicate key update
该方法据说如果字段不存在会自动插入。
2. 创建临时表,把需要更新的数据写进临时表,然后update。
网上说第2种方法效率更高,因此我直接采用了第2种方法试验,结果在不到1s的时间里处理完所有更新,喜出望外。
大致python代码如下:
con.query('BEGIN;')
sql = "CREATE TEMPORARY TABLE tmp_table(id varchar(32) primary key, num int(10));"
con.query(sql)
insert_str = "insert into tmp_table values ("
for rec in records:
insert_str += "'" + rec['_id'] + "','" + rec['total'] + "'), ("
insert_str = insert_str[0:-3] + ";"
write_log(insert_str)
con.query(insert_str)
update_str = "update info, tmp_table set info.num = tmp_table.num where info.id = tmp_table.id;"
con.query(update_str)
con.commit()