MYSQL:大量数据的插入更新

数据表结构如下:

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)

再次运行,速度快了很多,半天时间就处理完了!

猜你喜欢

转载自www.cnblogs.com/royhawk/p/12931445.html