如何进行MySQL批量insert效率对比

53次阅读
没有评论

共计 2776 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章给大家介绍如何进行MySQL 批量 insert 效率对比,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

MySQL 批量 insert 效率对比
事例如下:

 [root@BDMYSQL-200-104 dumpdir]# more phone_area_new.sql 
INSERT INTO `phone_area_new` VALUES ( 1302357 ,  江苏省 ,  江苏 - 南通 ,  南通 
INSERT INTO `phone_area_new` VALUES ( 1302358 ,  江苏省 ,  江苏 - 南通 ,  南通 
INSERT INTO `phone_area_new` VALUES ( 1302359 ,  江苏省 ,  江苏 - 南通 ,  南通 
INSERT INTO `phone_area_new` VALUES ( 1302360 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1302361 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1302362 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1302363 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1302364 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1302365 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1302366 ,  浙江省 ,  浙江杭州 ,  杭州 
INSERT INTO `phone_area_new` VALUES ( 1301743 ,  贵州省 ,  贵州 - 贵阳 ,  贵阳 
INSERT INTO `phone_area_new` VALUES ( 1301744 ,  贵州省 ,  贵州 - 安顺 ,  安顺 
INSERT INTO `phone_area_new` VALUES ( 1301745 ,  贵州省 ,  贵州 - 贵阳 ,  贵阳 
INSERT INTO `phone_area_new` VALUES ( 1301746 ,  贵州省 ,  贵州 - 贵阳 ,  贵阳 
INSERT INTO `phone_area_new` VALUES ( 1301747 ,  贵州省 ,  贵州 - 贵阳 ,  贵阳 
INSERT INTO `phone_area_new` VALUES ( 1301748 ,  贵州省 ,  贵州 - 贵阳 ,  贵阳 
INSERT INTO `phone_area_new` VALUES ( 1301749 ,  贵州省 ,  贵州 - 遵义 ,  遵义 
INSERT INTO `phone_area_new` VALUES ( 1301750 ,  河南省 ,  河南 - 焦作 ,  焦作 
--More--(0%)

行数大概有 271255 行:

 [root@BDMYSQL-200-104 dumpdir]# wc -l phone_area_new.sql
271255 phone_area_new.sql

如果不合并 insert 大概需要3个小时左右才导入完, 这样很悲剧,现在我们针对合并数量进行对比

1. 全并 1000 条数据

首先进行文本处理

 [root@BDMYSQL-200-104 dumpdir]# sed  N;s/;\r\?\n[^(]*/,/;0~1000!ba  phone_area_new.sql  mm.sql

清除表中数据

 system@localhost 21:01: [netdata]  truncate table phone_area_new;
Query OK, 0 rows affected (0.20 sec)

测试导入数据

 [root@BDMYSQL-200-104 dumpdir]# time mysql netdata mm.sql
real 0m19.028s
user 0m0.155s
sys 0m0.008s

速度惊人, 尽然只需要 19S

操作之前需要清理数据

 system@localhost 21:01: [netdata]  truncate table phone_area_new;
Query OK, 0 rows affected (0.20 sec)

合并数据

 [root@BDMYSQL-200-104 dumpdir]# sed  N;s/;\r\?\n[^(]*/,/;0~5000!ba  phone_area_new.sql  mm.sql

测试导入数据

 [root@BDMYSQL-200-104 dumpdir]# time mysql netdata mm.sql 
real 0m8.634s
user 0m0.151s
sys 0m0.008s

竟然只要 8S,还能不能更快

操作之前需要清理数据

 system@localhost 22:16: [netdata]  truncate table phone_area_new;
Query OK, 0 rows affected (0.24 sec)

合并数据

 [root@BDMYSQL-200-104 dumpdir]# sed  N;s/;\r\?\n[^(]*/,/;0~7000!ba  phone_area_new.sql  mm.sql

注释这里做合并花了十几秒

导入数据

 [root@BDMYSQL-200-104 dumpdir]# time mysql netdata mm.sql
real 0m7.290s
user 0m0.146s
sys 0m0.011s

7S,还能不能更快

操作之前需要清理数据

 system@localhost 22:20: [netdata]  truncate table phone_area_new;
Query OK, 0 rows affected (0.20 sec)

合并数据

 [root@BDMYSQL-200-104 dumpdir]# sed  N;s/;\r\?\n[^(]*/,/;0~8000!ba  phone_area_new.sql  mm.sql

导入数据

 [root@BDMYSQL-200-104 dumpdir]# time mysql netdata mm.sql 
real 0m7.477s
user 0m0.144s
sys 0m0.012s

批量提交数跟硬件 IO 性能有很大关系,硬件IO越好批量提交数可以设置高点

关于如何进行MySQL 批量 insert 效率对比就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计2776字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)