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

Oracle 在UPDATE语句中加入多个表

askTom 2017-09-21
248

问题描述

你好,汤姆,

需要您对在UPDATE语句中加入多个表的反馈
场景: 我想根据表 'd' 中的引用/键值更新表 'a' 的列值。下面是我的查询。它对少量记录有好处。但是当涉及到记录的lacs时,查询只会暂停很长时间。是否还有其他编写此查询的方法。

update
(select a.category as defaultcategory from a
left join b on b.xx_id = a.xx_id
left join c on c.zz_id = b.zz_id
left join d on d.yy_id = c.yy_id
where d.yy_id = ‘123’) dc
set dc.defaultcategory = (select kk_id from cc where name = 'NNN')


提前谢谢。

专家解答

'\ _(ツ)_/''

可能有。但是我们需要更多细节!

具体请包括:

-为您的所有表创建表语句。确保这包括这些表上的任何约束和索引!
-更新的执行计划

您可以通过在查询中添加gather_plan_statistics提示来获得此信息。然后调用DBMS_Xplan.display_cursor。就像这样:

set serveroutput off

update /*+ gather_plan_statistics */t 
set    x = x + 1;

select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));

SQL_ID  g4ya70274azsu, child number 0                                                  
-------------------------------------                                                  
update /*+ gather_plan_statistics */t  set    x = x + 1                                
                                                                                       
Plan hash value: 4095874790                                                            
                                                                                       
-------------------------------------------------------------------------------------  
| Id  | Operation          | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  
-------------------------------------------------------------------------------------  
|   0 | UPDATE STATEMENT   |      |      1 |        |      0 |00:00:00.01 |      10 |  
|   1 |  UPDATE            | T    |      1 |        |      0 |00:00:00.01 |      10 |  
|   2 |   TABLE ACCESS FULL| T    |      1 |      1 |      1 |00:00:00.01 |       7 |  
------------------------------------------------------------------------------------- 


确保您发送给我们的计划包括那些E行,A行和缓冲区列。

一个观察结果:

你所有的联接都是外部联接。但是你在D上有一个where子句。所以这些是内部连接。让他们这样!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论