MySQL一次查几万条数据,【mysql】一次插入几万条数据应该怎么做优化

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

回答

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一段时间后再次进行插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值