加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql如何高效批量插入数据

发布时间:2022-12-08 13:35:37 所属栏目:MySql教程 来源:未知
导读: mysql如何高效批量插入数据
1、一种可以再代码中循环着执行单条插入数据的语句,这种效率太差。
insert into table ([列名],[列名]) values ([列值],[列值]));
2、批量插入,这种效率比较

mysql如何高效批量插入数据

1、一种可以再代码中循环着执行单条插入数据的语句,这种效率太差。

insert into table ([列名],[列名])  values ([列值],[列值]));

2、批量插入,这种效率比较高效。

批量的好处:可以避免程序和数据库建立多次连接,增加服务器负荷。

SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M。而且,由于大量的数据,也需要控制好在客户端分配的内存。

insert into table  ([列名],[列名]) 
 VALUES
([列值],[列值])),
([列值],[列值])),
([列值],[列值]));

这里可能需要考虑的一个点,因为数据量大,可能分多次执行该语句,有时数据想要么都插入成功,要么插入都无效。这个就想着 采用合并数据 + 事务的方法,但是,事务是会有影响执行效率的。务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时MySQL 插入数据,效率会有所下降。

可以考虑,给数据加个状态,例如,插入前为初始化的状态, 待for循环插入成功后, 将刚所有的数据的状态都update为有效的状态。以修改成功返回的结果来判断是否数据都插入完毕来判断数据的一致性。

3、LOAD DATA

LOAD DATA INFILE 语句以非常高的速度从文本文件(csv/tsv)中读取行,再插入到表中。

用法

LOAD DATA INFILE ... [REPLACE|IGNORE] INTO TABLE : replace into 表示如果导入过程中有唯一性约束,直接覆盖;ignore into 则跳过。

load data 需要有处理文件的权限,GRANT FILE ON *.* TO user@host;

LOAD DATA INFILE filePath REPLACE?INTO TABLE myTable([列名1],[列名2])

将数据文件存储在客户端,并且使用LOCAL关键词。就是说在非服务端执行load data需要使用local,比如在 ipA 处登录 ipB 上的mysqld,就需要用到 local 。

LOAD DATA LOCAL INFILE filePath?INTO TABLE myTable([列名1],[列名2])

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!