MySQL快速导入千万条数据(2)

2022年2月26日 433点热度 2人点赞 0条评论

接上文,继续测试3000万条记录快速导入数据库。

一、导入前1000万条数据

清库、建库、新建表结构、导入前1000万条数据,结果:
■ 1000万行,有2索引导入耗时:16分钟

Query OK, 9999966 rows affected, 5920 warnings (16 min 12.95 sec)
Records: 9999966  Deleted: 0  Skipped: 0  Warnings: 5920

可见,导入千万条数据,性能下降明显。

二、导入前2000万条数据

清库、建库、新建表结构、导入前2000万条数据,结果:
■ 2000万行,无 索引导入耗时:45分钟

Query OK, 19999966 rows affected, 5920 warnings (45 min 2.05 sec)
Records: 19999966  Deleted: 0  Skipped: 0  Warnings: 5920

可见,导入更大量的数据,性能更是急剧下降,2000万条记录耗时长达45分钟!
由于是笔记本虚机,怀疑cpu性能、io性能、内存配置导致了这个结果。

三、导入后面的1000万条数据

由于一次导入千万条数据性能较低,因此决定把后面的1000万行,拆分为两部分,分两次导入,如下操作:
split -l 6000000 mysql_ab mysql_ab_
得到两个文件:

mysql_ab_aa 600万行
mysql_ab_ab 4579017行

插入mysql_ab_aa:耗时15分钟

LOAD DATA LOCAL INFILE '/root/mysql_ab_aa'
INTO TABLE tablename
FIELDS TERMINATED BY ', '
ENCLOSED BY "'"
LINES TERMINATED BY '\n';
Query OK, 6000000 rows affected (15 min 30.23 sec)
Records: 6000000  Deleted: 0  Skipped: 0  Warnings: 0

插入mysql_ab_ab:耗时8分钟

LOAD DATA LOCAL INFILE '/root/mysql_ab_ab'
INTO TABLE tablename
FIELDS TERMINATED BY ', '
ENCLOSED BY "'"
LINES TERMINATED BY '\n';
Query OK, 4579017 rows affected (7 min 51.05 sec)
Records: 4579017  Deleted: 0  Skipped: 0  Warnings: 0

四、建索引

再把对应的两个索引建上,每个索引耗时:3分钟

mysql> ALTER TABLE tablename ADD INDEX `master_id` (`master_id`);
Query OK, 0 rows affected (1 min 34.94 sec)
ALTER TABLE tablename ADD INDEX `code` (`code`);
Query OK, 0 rows affected (3 min 30.58 sec)

可见,3000万数据建普通索引,几分钟时间还是挺快的。

五、总结

纵观以上测试,导入3000万条数据耗时73分钟,如果将SQL文件拆分为单个文件500万条以内,可能会耗时更短,也许能控制在60分钟以内,如果电脑配置更高,则会更快。
后续继续在X86物理机做一个验证测试。

liking

我是雪人

文章评论