ITPub博客

首页 > 数据库 > MySQL > MySQL批量insert效率对比

MySQL批量insert效率对比

原创 MySQL 作者:shawnloong 时间:2017-01-15 22:17:36 0 删除 编辑

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 ':a;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 2. 全并5000条数据 操作之前需要清理数据
 system@localhost 21:01:  [netdata]> truncate table phone_area_new;
Query OK, 0 rows affected (0.20 sec) 


合并数据
 [root@BDMYSQL-200-104 dumpdir]#  sed ':a;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,还能不能更快 2. 全并7000条数据 操作之前需要清理数据
 system@localhost 22:16:  [netdata]> truncate table phone_area_new;
Query OK, 0 rows affected (0.24 sec) 


合并数据
 [root@BDMYSQL-200-104 dumpdir]#  sed ':a;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,还能不能更快 2. 全并8000条数据 操作之前需要清理数据
 system@localhost 22:20:  [netdata]> truncate table phone_area_new;
Query OK, 0 rows affected (0.20 sec) 


合并数据
 [root@BDMYSQL-200-104 dumpdir]#  sed ':a;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越好批量提交数可以设置高点

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24486203/viewspace-2132467/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-08-29

  • 博文量
    110
  • 访问量
    292650