| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
| SQL> DECLARE 2 TYPE T_ID IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 3 TYPE T_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 4 V_ID T_ID; 5 V_TYPE T_TYPE; 6 BEGIN 7 8 SELECT T.ID, DECODE(T1.ID, NULL, 0, 1) TYPE 9 BULK COLLECT INTO V_ID, V_TYPE 10 FROM T, 11 ( 12 SELECT T1.ID 13 FROM T1@YTK102 T1, T2@YTK102 T2, T3@YTK102 T3 14 WHERE T1.ID = T2.ID 15 AND T2.ID = T3.ID 16 ) T1 17 WHERE T.ID = T1.ID(+) 网管联盟bitsCN@com 18 AND T.TYPE != DECODE(T1.ID, NULL, 0, 1) 19 ; 20 21 FORALL I IN 1..V_ID.COUNT 22 UPDATE T SET TYPE = V_TYPE(I) WHERE ID = V_ID(I); 23 24 END; 25 / |
已用时间: 00: 00: 00.35
SQL> ROLLBACK;
回退已完成。
已用时间: 00: 00: 00.12
通过运用PL/SQL减少远端对象的访问次数和批量操作的运用,整个过程的执行时间已经从原来的50多秒优化到了0.35秒,如果这时候检查执行计划可以发现,由于是对本地的更新,Oracle选择当前站点作为驱动站点,且对远端三个表的查询采用了NESTED LOOP,如果使用HINT来规定驱动站点和HASH JOIN连接方式,还是获得一定的性能提升: 网管论坛bbs_bitsCN_com
网管论坛bbs_bitsCN_com
| SQL> DECLARE 2 TYPE T_ID IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 3 TYPE T_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 4 V_ID T_ID; 5 V_TYPE T_TYPE; 6 BEGIN 7 8 SELECT T.ID, DECODE(T1.ID, NULL, 0, 1) TYPE 9 BULK COLLECT INTO V_ID, V_TYPE 10 FROM T, 11 ( 12 SELECT /*+ DRIVING_SITE(T1) USE_HASH(T1 T2) USE_HASH(T3) */ T1.ID 13 FROM T1@YTK102 T1, T2@YTK102 T2, T3@YTK102 T3 14 WHERE T1.ID = T2.ID 15 AND T2.ID = T3.ID 网管论坛bbs_bitsCN_com 16 ) T1 17 WHERE T.ID = T1.ID(+) 18 AND T.TYPE != DECODE(T1.ID, NULL, 0, 1) 19 ; 20 21 FORALL I IN 1..V_ID.COUNT 22 UPDATE T SET TYPE = V_TYPE(I) WHERE ID = V_ID(I); 23 24 END; 25 / |
PL/SQL 过程已成功完成。
网管联盟bitsCN_com
网管bitscn_com
|
0
|
评论加载中…