共計 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 效率對比就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
正文完