数据表结构如下:
name char(20) addr char(15) info char(15) phone char(15) primary key(name,addr,info) |
插入时会检测name、addr和info,如果这三者都不一样则插入,如果一样,则对phone字段进行更新,其中表中包含上亿条数据。
开始时做如下处理:
1、开启事务,没处理50,000提交一次
2、使用replace into语句
结果处理了好几天,都没处理完,不知道哪里没做好。。。。
后来对程序进行改进:
1、开启事务,没处理50,000提交一次
2、使用insert into ... on duplicate key update语句
运行时报了异常:[Err] 1206 - The total number of locks exceeds the lock table size。
网上查找解决方案,需修改innodb_buffer_pool_size的大小,innodb_buffer_pool_size默认大小为8M,我改成了2G(主机内存8G),同时把innodb_flush_log_at_trx_commit设为了0(默认为1)
再次运行,速度快了很多,半天时间就处理完了!