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

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

[root@BDMYSQL-200-104dumpdir]#morephone_area_new.sqlINSERTINTO`phone_area_new`VALUES('1302357','江苏省','江苏-南通','南通');INSERTINTO`phone_area_new`VALUES('1302358','江苏省','江苏-南通','南通');INSERTINTO`phone_area_new`VALUES('1302359','江苏省','江苏-南通','南通');INSERTINTO`phone_area_new`VALUES('1302360','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1302361','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1302362','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1302363','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1302364','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1302365','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1302366','浙江省','浙江杭州','杭州');INSERTINTO`phone_area_new`VALUES('1301743','贵州省','贵州-贵阳','贵阳');INSERTINTO`phone_area_new`VALUES('1301744','贵州省','贵州-安顺','安顺');INSERTINTO`phone_area_new`VALUES('1301745','贵州省','贵州-贵阳','贵阳');INSERTINTO`phone_area_new`VALUES('1301746','贵州省','贵州-贵阳','贵阳');INSERTINTO`phone_area_new`VALUES('1301747','贵州省','贵州-贵阳','贵阳');INSERTINTO`phone_area_new`VALUES('1301748','贵州省','贵州-贵阳','贵阳');INSERTINTO`phone_area_new`VALUES('1301749','贵州省','贵州-遵义','遵义');INSERTINTO`phone_area_new`VALUES('1301750','河南省','河南-焦作','焦作');--More--(0%)行数大概有271255行:

[root@BDMYSQL-200-104dumpdir]#wc-lphone_area_new.sql271255phone_area_new.sql如果不合并insert大概需要3个小时左右才导入完,这样很悲剧,现在我们针对合并数量进行对比

1. 全并1000条数据首先进行文本处理

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

清除表中数据

system@localhost21:01:[netdata]>truncatetablephone_area_new;QueryOK,0rowsaffected(0.20sec)

测试导入数据

[root@BDMYSQL-200-104dumpdir]#timemysqlnetdata<mm.sqlreal0m19.028suser0m0.155ssys0m0.008s

速度惊人,尽然只需要19S2. 全并5000条数据操作之前需要清理数据

system@localhost21:01:[netdata]>truncatetablephone_area_new;QueryOK,0rowsaffected(0.20sec)

合并数据

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

测试导入数据

[root@BDMYSQL-200-104dumpdir]#timemysqlnetdata<mm.sqlreal0m8.634suser0m0.151ssys0m0.008s

竟然只要8S,还能不能更快2. 全并7000条数据操作之前需要清理数据

system@localhost22:16:[netdata]>truncatetablephone_area_new;QueryOK,0rowsaffected(0.24sec)

合并数据

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

注释这里做合并花了十几秒导入数据

[root@BDMYSQL-200-104dumpdir]#timemysqlnetdata<mm.sqlreal0m7.290suser0m0.146ssys0m0.011s

7S,还能不能更快2. 全并8000条数据操作之前需要清理数据

system@localhost22:20:[netdata]>truncatetablephone_area_new;QueryOK,0rowsaffected(0.20sec)

合并数据

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

导入数据

[root@BDMYSQL-200-104dumpdir]#timemysqlnetdata<mm.sqlreal0m7.477suser0m0.144ssys0m0.012s批量提交数跟硬件IO性能有很大关系,硬件IO越好批量提交数可以设置高点

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