一次插入几万条数据应该怎么做优化

刚刚去面试,面试官提问了我一次插入几万条数据有什么优化方法,一次更新几万条数据有什么优化方法,这些我之前都没有用过,希望大家给我解一下惑。

阅读 10.7k
6 个回答

1、insert批量执行,禁止单条insert value(注意单条sql长度限制,可临时调整max_allowed_packet)
2、开启事务处理,批量提交。原理类似上1(条件允许可适当增大innodb_log_buffer_size,增加单事务提交日志量,该参数read only)
3、主键顺序插入,效率更高
4、业务允许,暂时disable keys

对要插入的数据进行分组批量插入
INSERT INTO table (column1, column2, ..., column_n) VALUES (value11, value12, ..., value1n), (value21, value22, ... value2n), ..., (value_n1, value_n2, ... value_nn)
可以参考这个:http://www.yiichina.com/tutor...

INSERT INTO table (column1, column2, ..., column_n) VALUES (value11, value12, ..., value1n), (value21, value22, ... value2n), ..., (value_n1, value_n2, ... value_nn)

MySQL好像对参数个数没啥限制,所以一次插入近千条是没问题的,上万条数据也就没几句INSERT了。

UPDATE的话,如果一个WHERE就命中几万行,每行UPDATE规则都一样的话,而且不涉及到太多索引,应该是比较快的。
如果涉及到太多索引了,那就先批量DELETE,再批量INSERT.

如果不是在线实时运行插入程序的话,可以先去掉索引,停掉记录二进制日志文件,然后执行批量插入任务,插入时可以以一定数量的数据组织成一条insert语句,就想楼上写的那样,然后在循环技术中执行插入。更新的话逻辑也差不多

使用INSERT INTO table (column1, column2, ..., column_n) VALUES (value11, value12, ..., value1n), (value21, value22, ... value2n), ..., (value_n1, value_n2, ... value_nn)
进行分批次插入; 假入有10000条数据等待插入,分成100次插入(即一次insert100条);
一次执行结束后sleep一段时间后再次进行插入

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏