因业务需要,将100万条Excel数据导入MySql
OS : CentOS7 , MySql 5.7
做了2个纯命令导入测试,不考虑phpmyadmin,navicate导入.
首先MySql调整全局变量
set max allowed packet =104857600 (100Mb)
set wait_timeout=288000
set interactive timeout=288000
此次是直接在将文件放在server上,所以只调整上面三个.
远程调用可能还 需要调整,
bulk_insert_buffer_size=120M
MYISAM_SORT_BUFFER_SIZE=104857600 ;
KEY_BUFFER_SIZE=256217728
对于有主键的需要先关闭
alter table ${table_name} disable keys;
1 将excel 做成sql批量数据插入语句,没错values后有100万条.
insert.txt 共有40MB. 生成sql语句格式如下
CONCATENATE("insert into 表名 (列1,列2,列3) values ('",A1,"','",B1,"','",C1,"');")
分别使用Myisam,Innodb引擎和Source命令

如果不修改 max allowed packet 默认值就会出现 Server gone away.
Myisam引擎具有明显优势,只花了2.72sec
2 将excel数据另存为csv, 使用Utf-8编码,生成insert2.csv 36Mb ,100万行 .
将insert2.csv拷贝到 /var/lib/mysql-file/
使用load data in file 导入

在CentOS7和MySql 5.7环境下,通过命令行对比了将100万条Excel数据以SQL语句和CSV格式导入MySql的效率。结果显示,使用Myisam引擎并配合`LOAD DATA INFILE`命令的CSV导入方法在2.72秒和1.06秒内完成,远优于Innodb,并且`LOAD DATA`比`SOURCE`命令更快。
163

被折叠的 条评论
为什么被折叠?



