批量向MySQL导入1000万条数据的优化

批量向MySQL导入1000万条数据的优化,第1张

1.用start transaction关闭mysql的自动提交,合理设置插入批量大小,不要一条数据提交一次。 2.修改表的存储引擎InnoDB为MyISAM。(因为InnoDB中存在redo log日志,每次更新表的结果先写入redo log中,等redo log满了之后再写入磁盘而这个过程是会停止其他所有的事务) 3.优化SQL(一条SQL语句插入多条数据) 4.尽量顺序插入(存储引擎底层采用的数据结构是B+tree索引,如果每次插入记录都在索引的最后面,索引的定位效率很高,并且对索引调整较小;如果插入的记录在索引中间,则需要维护B+tree并且索引定位效率会下降,数据量较大时会有频繁的磁盘 *** 作)

一次插入多行数据

insert

into

表名[(字段列表)]

values(值列表1),(值列表2),...(值列表n)

例如:

insert

into

students(sid,sname,dob)

values

('001','张三','2001-02-03'),

('002','李四','2002-02-03'),

('003','王五','2003-02-03');

将一张表或查询中的数据插入到另一张表里

insert

into

表名(字段列表)

select

(字段列表)

from

源表

where

筛选表达式;

例如将表2中的记录全部插入到表1,假设它们的结构一样

insert

into

表1(*)

select

*

from

表2;


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6127632.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存