按业务需求需要模拟亿级数据插入到数据库,我们可以使用存储过程做循环插入,参考存储过程代码链接:https://blog.csdn.net/qq_42093488/article/details/87160817
DROP PROCEDURE IF EXISTS insertemployees; CREATE PROCEDURE insertemployees() BEGIN DECLARE i INT; SET i=1; WHILE(i<=100000000) DO insert into employees_partition values(i, CONCAT(i, '-NAME'), CONCAT('NO.', i)); SET i=i+1; END WHILE; END; 调用存储过程 call insertemployees();
由于我的字段和索引比较多,插入速度大概是3W/分钟,插入1E需要太久了,后面想要优化一下。
1.innodb_flush_log_at_trx_commit 配置设定为0,速度感觉变化不大。
2.存储过程insert into value后面拼接100条数据,速度变成165W/分钟,效果极快,如果拼接1000条数据会更快。
大概一上午导完一亿数据后,我们可以进入第二步操作。
alter table tx_pay_log modify column channel varchar(500);
由于生产环境数据长度不足问题导致入库报错我们就可以尝试修改字段长度,从varchar(255)改成varchar(500),居然0.03秒就完成了。。
然后从500改成255会锁表,而且用了半小时。。。估计是要扫描全表的字段看看是否符合长度
然后长度60改61没事,改成88就会要很长时间,因为utf8一个字符3字节,88x3 >255,需要全表扫描,详见
https://blog.csdn.net/yuanlairuci1992/article/details/126886422
如果是utf8mb4,就是4个字节
查询正在执行的sql语句,如果是sql卡了可以查询后把他kill掉
SELECT * FROM information_schema.processlist WHERE command != 'Sleep';
标签:存储,varchar,段长度,表字,插入,亿级,255 From: https://www.cnblogs.com/bbibbi/p/17026884.html