暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Update语句有重复的行,没有

askTom 2018-01-10
560

问题描述

嗨,

我从人力资源部创建了两个表emp,emp2。员工。
之后,我在下面执行插入语句

现在在两个表中employee_id是唯一的。

insert into emp select * from emp; --4 times

insert into emp2 select * from emp2; --4 times
复制


现在在两个表中employee_id不是唯一的。

然后我在下面运行更新语句
update emp set employee_id = rownum;
复制


现在employee_id在emp表中是唯一的,但在emp2中不是唯一的

之后,我在2个表上运行了以下更新。

update emp set employee_id = employee_id; 
update emp2 set employee_id = employee_id;
复制


然后我注意到Emp2表上的update语句比emp表上的update花费的时间更少。
两个表都是从同一个表中创建的,并且除了employee_id列之外,具有相同的数据。
为什么在emp2上更新提交速度快于在EMP表上更新。


提前谢谢。

专家解答

因此,LiveSQL脚本显示了emp的更新,在emp2上采用5cs与4cs。相差0.01秒。那不值得谈论!

特别是因为这是dbms_utility.get_time的最小度量单位。这可能是四舍五入或收集错误的结果。

的确,当我运行它时,它们都以6cs的速度出现:

create table emp as select * from hr.employees;
create table emp2 as select * from hr.employees;

insert into emp select * from emp;
insert into emp2 select * from emp2;

insert into emp select * from emp;
insert into emp2 select * from emp2;

insert into emp select * from emp;
insert into emp2 select * from emp2;

insert into emp select * from emp;
insert into emp2 select * from emp2;

update emp set employee_id = rownum;
commit;

declare
  x   number;
begin
  x   := dbms_utility.get_time;
  dbms_output.put_line( 'Time - ' || x );
  
  update emp
  set    employee_id = employee_id;

  dbms_output.put_line( 'Time - ' || ( dbms_utility.get_time - x ) );
end;
/

Time - 1803110186
Time - 6

declare
  x   number;
begin
  x   := dbms_utility.get_time;
  dbms_output.put_line( 'Time - ' || x );
  
  update emp2
  set    employee_id = employee_id;

  dbms_output.put_line( 'Time - ' || ( dbms_utility.get_time - x ) );
end;
/

Time - 1803110244
Time - 6
复制


运行性能测试时,请确保:

-重复几次。由于解析等原因,第一次执行的速度往往较慢。而且您可能会在其他运行中偶然获得缓慢的执行。多次运行允许您发现这些问题
-测试之间有有意义的不同表现!在我的书中,一个测试比另一个测试快一个单位的最小测量结果并不重要。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论