DB2批量插入性能对比

import ibm_db
import random
import time
first_names = ‘赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏‘               ‘陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍‘               ‘史唐费廉岑薛雷贺倪汤滕殷罗毕安常乐于时傅皮卞齐康伍余元顾孟黄穆萧尹‘               ‘姚邵湛汪祁毛狄米贝明臧计伏成戴谈宋庞熊纪舒屈项祝董梁杜阮蓝闵季贾路娄‘               ‘危江童颜郭梅林刁钟徐邱骆高夏蔡田樊胡凌霍虞万柯管卢莫房缪干解丁宣邓郁单‘               ‘洪包诸左石崔龚程嵇邢裴陆翁羊惠甄曲封储靳段巫乌焦山谷车侯宓全郗班秋仲伊宫‘               ‘宁仇栾甘厉祖武符刘景詹龙叶幸司韶郜黎蓟薄印宿白蒲邰赖卓蔺屠蒙池乔胥闻党翟‘               ‘谭劳姬申冉雍桑桂濮牛边农温庄晏柴瞿阎连习艾向古廖‘
def GBK2312():
    head = random.randint(0xb0, 0xf7)
    body = random.randint(0xa1, 0xf9)   # 在head区号为55的那一块最后5个汉字是乱码,为了方便缩减下范围
    val = f‘{head:x}{body:x}‘
    str = bytes.fromhex(val).decode(‘gb2312‘)
    return str
# 获取随机姓名
def get_random_name():
    first_name = random.choice(first_names)
    if random.randrange(2) == 0:
        return first_name + GBK2312()
    else:
        return first_name + GBK2312() + GBK2312()

# 方案一:拼接SQL批量插入
def first():
    conn = ibm_db.connect("database=POBC; "
                          "hostname=localhost; "
                          "port=50000; "
                          "protocol=tcpip; "
                          "uid=administrator; "
                          "pwd=wyz","","")
    start_time = time.time()
    sql_array = []
    sql_array.append("INSERT INTO info VALUES(1,‘张三‘,‘男‘)")
    sexes = ["男", "女"]
    for i in range(80000):
        name = get_random_name()
        sex = random.choice(sexes)
        str = ",({0},‘{1}‘,‘{2}‘)".format(i,name,sex)
        sql_array.append(str)
    sql = "".join(sql_array)
    print("拼接完成。。")
    # print(sql)

    stmt = ibm_db.exec_immediate(conn,sql)
    print(ibm_db.num_rows(stmt))
    print(time.time() - start_time)
    ‘‘‘
    拼接完成。。
    80001
    32.71020555496216
    ‘‘‘
# 方案二,放入事务,批量提交
def second():
    array = {ibm_db.SQL_ATTR_AUTOCOMMIT: ibm_db.SQL_AUTOCOMMIT_OFF}
    conn = ibm_db.pconnect("database=POBC; "
                          "hostname=localhost; "
                          "port=50000; "
                          "protocol=tcpip; "
                          "uid=administrator; "
                          "pwd=wyz","","",array)
    sexes = ["男", "女"]
    start_time = time.time()
    try:
        for i in range(80000):
            name = get_random_name()
            sex = random.choice(sexes)
            sql = "INSERT INTO info VALUES({0},‘{1}‘,‘{2}‘)".format(i, name, sex)
            ibm_db.exec_immediate(conn, sql)
    except:
        print("Transaction couldn‘t be completed.")
        ibm_db.rollback(conn)
    else:
        ibm_db.commit(conn)
        print("Transaction complete.")
        print("COST:", time.time() - start_time)
    ‘‘‘
    Transaction complete.
    COST: 232.1929647922516
    ‘‘‘
# 方案三,常规做法
def third():
    conn = ibm_db.pconnect("database=POBC; "
                          "hostname=localhost; "
                          "port=50000; "
                          "protocol=tcpip; "
                          "uid=administrator; "
                          "pwd=wyz", "", "")
    sexes = ["男", "女"]
    start_time = time.time()
    for i in range(80000):
        name = get_random_name()
        sex = random.choice(sexes)
        sql = "INSERT INTO info VALUES({0},‘{1}‘,‘{2}‘)".format(i, name, sex)
        ibm_db.exec_immediate(conn, sql)
    print("Transaction complete.")
    print("COST:", time.time() - start_time)
    ‘‘‘
    Transaction complete.
    COST: 159.8599555492401
    ‘‘‘
if __name__ == ‘__main__‘:
    # first()
    # second()
    third()

原文地址:https://www.cnblogs.com/staff/p/10023823.html

时间: 2024-08-30 08:05:01

DB2批量插入性能对比的相关文章

JDBC批量插入性能简单分析

批量插入性能分析:仅仅针对性能 1.使用Statement对象,一次一个,循环插入 2.使用PreparedStatement对象,一次一个,循环插入 3.使用PreparedStatement对象,使用addBatch(),executeBatch(),clearBatch()实现批量插入 注意事项: 1)数据库的驱动需要是5.1.37之后的版本,否则不支持批量操作 2)mysql数据库默认不开启批量操作,需要在数据库的url后面加上:?rewriteBatchedStatements=tru

Mybatis+mysql批量插入性能分析测试

前言 今天在网上看到一篇文章(后文中的文章指的就是它) https://www.jianshu.com/p/cce617be9f9e 发现了一种有关于mybatis批量插入的新方法,而且看了文章发现我原来的方法好像有点问题,但是由于文章中使用的环境是sqlserver而我经常使用的是mysql所以还是需要亲自来试试. 环境说明 项目使用springboot mybatis 数据库mysql5.7 使用本地mysql所以网络可以忽略不计 插入对象完全相同,只有id自增 表结构如下: CREATE

关于Mybatis三种批量插入方式对比

第一种:普通for循环插入 @Test public void testInsertBatch2() throws Exception { long start = System.currentTimeMillis(); User user; SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(false); UserDao mapper = sqlSession.getMapper(User

MySQL和OneSQL并行插入性能对比

按照我的作风,没图说个啥 环境 下面是受叶金荣老师的启发把相关环境交代清楚 MySQL和OneSQL的关键参数配置如下 数据库 sync_binlog innodb_flush_log_at_trx_commit innodb_log_file_size innodb_buffer_pool_size OneSQL 0 1 1000M 8G MySQL 0 1 1000M 8G 硬件环境 内存 cpu 磁盘 32g 8c 每个core上有两个超线程 Intel(R) Xeon(R) CPU  E

Android Sqlite 批量插入性能优化

db.beginTransaction(); try { for (...) { db.execSQL("...", new Object[]{}); } db.setTransactionSuccessful(); } catch (Exception e) { } finally { db.endTransaction(); } 原文地址:https://www.cnblogs.com/nodegis/p/10579925.html

ArrayList与LinkedList的性能对比

ArrayList与LinkedList都是继承至Collection对象,内部实现导致性能方面存在一定的区别 插入性能对比 private final static int COUNT = 10000000; private static long insertObject(List<Object> list) { Object obj = new Object(); long startTime = System.currentTimeMillis(); for (int i = 0; i

向mysql中批量插入数据的性能分析

MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VARCHAR( 50 ) NOT NULL,other_value VARCHAR( 50 ) NOT NULL) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example(example_id, name, valu

MySQL批量SQL插入性能优化

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的.经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考. 1. 一条SQL语句插入多条数据.常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUE

MYSQL开发性能研究&mdash;&mdash;批量插入的优化措施

一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1);   很显然,在MYSQL中,这样的方式也是可行的.但是当我们需要批量插入数据的时候,这样的语句却会出现性能问题.例如说,如果有需要插入100000条数据,那么就需要有100000条insert语句,每一句都需要提交到关系引擎那里去解析,优化,然后才能够到达存储引擎做真的插入工作. 正是由于性能的瓶颈问题,MYSQL官方文档也就提到了使