共计 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 效率对比就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
正文完