MySql批量导入

最好使用source方式比较快,先生成Sql文件
source命令导入时:如果一次性插入的数据太多,mysql会自动优化,拆开多次插入,如在导入时发现,一张表有100万左右数据,它每次插入是1万多条

wait_timeout = 120
max_allowed_packet = 32M
interactive_timeout = 120

#块插入缓存大小可提高数据插入的效率(默认是8M)(Source模式)
bulk_insert_buffer_size=32M

#每次tablespace扩展都会让各个Sql处于等待状态,增加自动扩展Size可以减少tablespace自动扩展次数
innodb_autoextend_increment=128

#1->每一次事务提交或事务外的指令都需要把日志写入硬盘,2->不写入硬盘而是写入系统缓存
innodb_flush_log_at_trx_commit=2

#此配置项作用设定innodb数据库引擎写日志缓存区,将此缓存段增大可以减少数据库写数据文件次数
innodb_log_buffer_size=16M

#此配置项作用设定innodb数据库引擎UNDO日志的大小,从而减少数据库checkpoint操作
innodb_log_file_size=128M

// 提高性能的其他注意:
插入之前将表锁定(只针对非事务处理型的表)(导出的Sql中已经有了:如LOCK TABLES test WRITE;然后UNLOCK TABLES;)

// 还可使用LOAD DATA INFILE命令导入(他速度非常的快)
load data infile “test.txt” replace into table test character set utf8 fields terminated by ‘,’ enclosed by ‘"’ lines terminated by ‘\n’ (name,age,description);

// 在事务中进行插入处理(事务太大可能会影响执行的效率,innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时效率会下降,较好的做法是:在数据达到这个这个值前进行事务提交)
START TRANSACTION;
INSERT INTO test(id,col,date_time,users_id) VALUES (1,‘2’,‘2017-11-15 09:01:01’,’’),(2,‘1’,‘2017-11-15 09:01:01’,NULL);
COMMIT;

// 主键有序插入
由于数据库插入时,需要维护索引数据,无序的记录会增大维护索引的成本

/MySql中设置max_allowed_packet(默认单位为字节)的方式**********/
set global max_allowed_packet = 1024 * 1024 * 2 * 10;(这里有20M)
flush privileges;
show VARIABLES like ‘%max_allowed_packet%’;// 查看一下

/source导入模板样例**************************************************************************************/
use test;

DROP TABLE IF EXISTS test;
CREATE TABLE test (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
col varchar(45) DEFAULT NULL,
date_time datetime DEFAULT NULL,
users_id varchar(45) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

LOCK TABLES test WRITE;
INSERT INTO test(id,col,date_time,users_id) VALUES (1,‘2’,‘2017-11-15 09:01:01’,’’),(2,‘1’,‘2017-11-15 09:01:01’,NULL);
UNLOCK TABLES;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023年Java面试宝典

您的鼓励是对我的肯定,共建希望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值