刚刚去面试,面试官提问了我一次插入几万条数据有什么优化方法,一次更新几万条数据有什么优化方法,这些我之前都没有用过,希望大家给我解一下惑。
对要插入的数据进行分组批量插入
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一段时间后再次进行插入
2 回答3.1k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1、insert批量执行,禁止单条insert value(注意单条sql长度限制,可临时调整max_allowed_packet)
2、开启事务处理,批量提交。原理类似上1(条件允许可适当增大innodb_log_buffer_size,增加单事务提交日志量,该参数read only)
3、主键顺序插入,效率更高
4、业务允许,暂时disable keys