【MYSQL】批量数据插入mysql,如何提升性能

目录

0 前言

1 解决方案1

1.1 在insert语句上做文章

1.2  我的测试

1.2.1 一次插入10条数据

1.2.2 一次插入1条数据


0 前言

大数据,当然得把数据插入到数据库中,才能进行分析,那么今天我在插入大批量的数据时,遇到了一个性能问题,那就是通过单线程插入3600左右的记录到mysql数据库中,但是速度很慢,那么今天我就介绍几种我自己的观点,关于如何提升批量插入数据性能的解决方案的观点。

1 解决方案1

1.1 在insert语句上做文章

我们可以在插入数据时,不一次插入一条,而是一次插入n条,比如说10条或者20条之类的,但是并不是说一次插入越多,性能就越好,这里有一篇博客,介绍的就是一次插入多少条时性能最优,博客连接。博客中提到,应该是在一次插入10条数据时,性能最优,也就是时间最短。

1.2  我的测试

我在自己电脑做了一个测试,数据库是在阿里云上的数据库,但是延时还是很短,所以网络因素这里可以暂时忽略不计。

1.2.1 一次插入10条数据

这是一次使用insert语句一次插入10条数据时的测试结果,数据大概是3070条左右,这里附上部分代码,也就是我插入数据时的代码,之于对数据做处理的代码,这里暂时不展示。


    ##################批量插入数据测试
    import event
    import time
    s = time.time()
    info = event.Event().compareRealTimeDataWithHistoryData()
    print(len(info))
    con = 0
    if query.check_table_by_name("{}_copy".format("cib1811168_6_2s2019")) is not True:
        query.create_realTime_table_copy()
        for data in info:
            if len(data) == 10:
                # con += 1
                # pass
                if query.insert_into_table_show_rate_10_colums(data) and query.insert_into_realTime_table_copy_10_colums(data):
                    con += 1
            else:
                con += 1
                for each in data:
                    each = each.split(",")
                    query.insert_into_realTime_table_copy(each)
                    query.insert_into_table_show_rate(each)
    else:
        for data in info:
            if len(data) == 10:
                # con += 1
                # pass
                if query.insert_into_table_show_rate_10_colums(data) and query.insert_into_realTime_table_copy_10_colums(data):
                    con += 1
            else:
                con += 1
                for each in data:
                    each = each.split(",")
                    query.insert_into_realTime_table_copy(each)
                    query.insert_into_table_show_rate(each)


    print(con)
    print("time:{}".format(time.time()-s))

1.2.2 一次插入1条数据

从结果中可以看到,相比于1.2.1中的一次插入10条数据相比,这种一次插入一条数据的方式,效率确实很低,想差好多倍(8.6倍左右),这里也附上部分代码,仅供参考。

##################逐条插入数据测试
    import event
    import time

    s = time.time()
    info = event.Event().compareRealTimeDataWithHistoryData()
    print(len(info))
    con = 0
    if query.check_table_by_name("{}_copy".format("cib1811168_6_2s2019")) is not True:
        query.create_realTime_table_copy()
        for data in info:
            con += 1
            for each in data:
                each = each.split(",")
                query.insert_into_realTime_table_copy(each)
                query.insert_into_table_show_rate(each)
    else:
        for data in info:
            con += 1
            for each in data:
                each = each.split(",")
                query.insert_into_realTime_table_copy(each)
                query.insert_into_table_show_rate(each)

    print(con)
    print("time:{}".format(time.time() - s))

1.3  性能对比

从上面的对比结果中,我们可以看到,使用一次插入10条数据与一次插入1条数据,对于性能的提升很明显,前者较之于后者而言,性能提升了860%,也就是说对于插入同样条数的记录,后者花费的时间是前者的8.6倍。当然,本文还没有对一次插入20条或者30条做测试对比,以后有时间会加上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值