达梦大表更新速度和更新粒度测试(单机环境测试)


### Code Reference
  • DESC:dameng大表更新速度测试
  • Last Update:2020-7-13 10:32
    • 创建测试数据(1000W)

            drop table rede."个人信息";
            create table rede."个人信息" as 
            select rownum as id,
                   to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as "办卡日期",
                   trunc(18510911437 - dbms_random.value(-100000, 100000)) as "电话号码",
                   'TDE' || dbms_random.string('x', 20) as "身份证号",
                   'TDE' || dbms_random.string('x', 15) as "银行卡号"
              from dual
            connect by level <= 10000000;
            alter table rede."个人信息" add primary key("ID");
      
    • 开始进行测试数据更新

       -- 查询基表数据
       select rownum,T.*
         from rede."个人信息" T
        where 电话号码 = 18510930539;
        --and rownum / 1000 = 1;
        
        -- 查询更新的位置46470
        select count(1)
         from rede."个人信息" T
         where T.银行卡号='钱塘江上是谁家,江上女儿全胜花。'
         
       -- 进行数据更新  
       declare
         ld_begin datetime;
         ld_end   datetime;
       begin
       
       for i in 1..5 LOOP
       
         ld_begin := sysdate;
       
         -- 插入|创建临时表
         -- 调整批次每次为
           -- 500更新速度为20ms
           -- 1000更新速度为28ms
           -- 2000则为4s329ms
           -- 10000则为4s329ms
           -- 100000则为5秒 417
           -- 100000017秒 571
           -- 20200713140707 000000-20200713140647 000000-20秒
           -- 20200713140723 000000-20200713140707 000000-16秒
           -- 20200713140743 000000-20200713140723 000000-20秒
           -- 20200713140815 000000-20200713140743 000000-32秒
           -- 20200713140850 000000-20200713140815 000000-35秒
         insert into rede."temp_个人信息"
         --create table rede."temp_个人信息" as
           select (rownum / 1000000) as "queueID", t.id
             from rede."个人信息" t
            where 1 = 1
              and t.银行卡号 != '钱塘江上是谁家,江上女儿全胜花。'
              and rownum < 2000000;
       
         -- 更新基表 
         update rede."个人信息" t
            set t.银行卡号 = '钱塘江上是谁家,江上女儿全胜花。'
          where exists (select 1
                   from rede."temp_个人信息" t1
                  where t.id = t1.id
                    and T1."queueID" = 0);
       
         -- 清空临时表|查询临时表
         execute immediate 'truncate TABLE rede."temp_个人信息"';
         --Select * FROM rede."temp_个人信息";
         ld_end := sysdate;
         print TO_CHAR(ld_end,'YYYYMMDDHH24MISS FF6') ||'-'|| TO_CHAR(ld_begin,'YYYYMMDDHH24MISS FF6')
         ||'-'||round(to_number(ld_end - ld_begin)* 24 * 60 * 60) || '秒';
       end loop;
       end;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redelego@cloud

XXXXXXXXXXXXXXX

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值