### 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;
-