我是靠谱客的博主 彪壮大地,最近开发中收集的这篇文章主要介绍mysql分块批量插入数据(insert)性能分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一次插入多条数据时,可以使用 insert into table values (v1), (v2) ... (vn) 语句,这样可以避免程序和数据库建立多次连接,从而减少服务器运行时间。

实验设计:

数据库mysql
数据库地址本机
数据总数10万
程序语言Python

数据库设计:

代码:

#encoding=utf8
import pymysql
import string
import random
import time

def get_ran_str():
    return ''.join(random.sample(string.ascii_letters + string.digits, 16))

def get_values_exp(count):
    exp = []
    for i in range(0, count):
        name = get_ran_str()
        key = get_ran_str()
        value = get_ran_str()
        exp.append(f"('{name}', '{key}', '{value}')")
    return ",".join(exp)

if __name__ == '__main__':
    conn = pymysql.connect('localhost', '', '', 'db')
    cursor = conn.cursor()
    arr_count = [1,2,5,10,20,50,100,200,500,1000,2000,5000,10000,20000,50000]
    for count in arr_count:
        sql = "delete from test_insert;"
        cursor.execute(sql)
        sql = 'alter table test_insert auto_increment=1;'
        cursor.execute(sql)
        conn.commit()
        num = 100000
        begin_time = time.time()
        for i in range(0, num//count):
            sql = "insert into test_insert(`name`,`key`,`value`) values " + get_values_exp(count)
            cursor.execute(sql)
            conn.commit()
        end_time = time.time()
        run_time = end_time - begin_time
        print(f'每块{count}条数据的运行时间:{run_time}秒')

实验结果:

每块数据条数运行时间
1625.0080001354218
2324.8550000190735
5146.0849997997284
1085.9079999923706
2053.58800005912781
5032.60899996757507
10025.304999828338623
20021.836999893188477
50017.63699984550476
100011.73800015449524
200014.864000082015991
500014.25499963760376
1000011.13699984550476
2000010.92199969291687
5000010.728999853134155
100000异常

实验分析:

运行时间随块大小的增大先急剧减少,然后趋于稳定

数据分块大小不能无限大,当块大小为10万时,程序就会抛出异常:

使用事务进行插入处理能够提高数据插入效率:

for i in range(0, num//count):
    sql = "insert into test_insert(`name`,`key`,`value`) values " + get_values_exp(count)
    cursor.execute(sql)
conn.commit()

实验结果如下:

每块数据条数运行时间
128.40499997138977
214.674999713897705
510.174000263214111
108.79200005531311
208.255000114440918
507.776000022888184
1007.33899998664856
2007.374999761581421
5007.142000198364258
10007.124000072479248
20007.20799994468689
50007.055999994277954
100007.039999961853027
200007.091000080108643
500007.04800009727478

实验分析:

运行时间随块大小的增大先急剧减少,然后趋于稳定,最后稳定在7s左右

总结:

提示批量插入性能的方法:

1、使用事务管理

2、使用 insert into table values (v1), (v2) ... (vn) 分块批量插入,块大小不宜过小,也不宜过大

最后

以上就是彪壮大地为你收集整理的mysql分块批量插入数据(insert)性能分析的全部内容,希望文章能够帮你解决mysql分块批量插入数据(insert)性能分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部