Oracle多表关联update优化

       我们都知道,在Oracle数据库中,对单表进行更新采用标准update语法效率是非常高的,语法为UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值,如下SQL所示: 
update t_join_situation set join_state = '1' where year='2011'
      如果涉及关联表,并把一个表的字段值更新到另一个表中的字段去,采用以上更新方式,语句通常这样写:update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where exists(select 1 from 表b where a.字段2=b.字段2),如下SQL所示:
update  t_join_situation a set a.join_state=(select b.join_state from t_people_info b 
where a.people_number=b.people_number 
and a.year='2011' and a.city_number='M00000' and a.town_number='M51000')
where exists (select 1 from t_people_info b 
where a.people_number=b.people_number 
and a.year='2011' and a.city_number='M00000' and a.town_number='M51000')
       但是,这样更新的效率是非常低的。

       这里,推荐几种多表关联update优化的方式:

      (1)inline view 更新法

       inline view更新法就是更新一个临时建立的视图。如:
update (sele
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 引起数据库性能问题的因素 1 1.1 软件设计对数据库的影响 1 1.1.1 软件架构设计对数据库性能的影响 1 1.1.2 软件代码的编写对数据库性能的影响 2 1.2 数据库的设计 8 1.2.1 oltp数据库 9 1.2.2 olap数据库 10 1.3 数据库的硬件设计 14 1.3.1 存储容量 15 1.3.2 存储的物理设计 16 1.3.3 数据的安全 17 1.4 小结 19 第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 select for update 30 2.3.2 外键和索引 36 第3章 latch和等待 44 3.1 共享池中的latch争用 45 .3.2 数据缓冲池latch争用 54 3.2.1 数据块 54 3.2.2 索引数据块 59 3.2.3 索引根数据块 62 3.2.4 段头数据块 65 第4章 优化器 66 4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 6.1.2 rule hint 117 6.2 访问路径相关的hint 117 6.2.1 full hint 118 6.2.2 index hint 118 6.2.3 no_index hint 118 6.2.4 index_desc hint 119 6.2.5 index_combine hint 119 6.2.6 index_ffs 119 6.2.7 index_join 120 6.2.8 index_ss hint 120 6.3 关联顺序的hint 125 6.3.1 leading hint 125 6.3.2 ordered hint 126 6.4 关联操作的hint 127 6.4.1 use_hash,use_nl和use_merge hint 127 6.4.2 no_use_hash hint 132 6.4.3 no_use_merge hint 133 6.4.4 no_use_nl hint 133 6.5 并行执行相关的hint 134 6.5.1 parallel hint 134 6.5.2 no_parallel hint 134 6.6 其他方面的一些hint 135 6.6.1 append hint 135 6.6.2 dynamic_sampling hint 135 6.6.3 driving_site hint 136 6.6.4 cache hint 136 6.7 小结 136 第7章 分析及动态采样 138 7.1 直方图 141 7.2 dbms_stats包 147 7.3 动态采样 176 7.3.1 什么是动态采样 176 7.3.2 动态采样的级别 182 7.3.3 什么时候使用动态采样? 185 7.4 小结 185 第8章 并行执行 186 8.1 并行和olap系统 187 8.2 并行处理的机制 189 8.3 读懂一个并行处理的执行计划 191 8.4 一个很常见的并行执行等待事件 192 8.5 并行执行的适用范围 194 8.5.1 并行查询 194 8.5.2 并行ddl操作 195 8.5.3 并行dml操作 203 8.6 并行执行的设定 210 8.6.1 并行相关的初始化参数 210 8.6.2 并行度的设定 211 8.7 直接加载 213 8.7.1 直接加载和redo 216 8.7.2 直接加载和索引 219 8.7.3 直接加载和并行 221 8.7.4 直接加载和sql*loader 226 第9章 变量绑定 232 9.1 什么是变量绑定,为什么要做变量绑定 232 9.2 为什么说oltp必须要求变量绑定而olap不应该绑定变量 241 9.3 bind peaking 248 第10章 sql_trace和10046事件 254 10.1 sql_trace 254 10.2 tkprof工具 256 10.3 10046事件 268 第11章 10053事件 276 第12章 性能视图和性能参数 294 12.1 性能视图 294 12.1.1 v$sql 295 12.1.2 v$sql_shared_cursor 300 12.1.3 v$session 305 12.1.4 v$sessstat 309 12.1.5 v$session_wait 310 12.2 性能参数 312 12.2.1 cursor_sharing 313 12.2.2 db_file_multiblock_read_count 328 12.2.3 pga_aggregate_target和sga_target 334 12.2.4 optimizer_dynamic_sampling 334 第13章 性能报告 335 13.1 awr性能报告 335 13.1.1 生成awr性能报告 337 13.1.2 awr性能报告分析 342 13.2 statspack性能报告 386 13.2.1 statspack的安装 386 13.2.2 statspack性能采集 391 13.3 ash性能报告 394 13.3.1 生成ash性能报告 395 13.3.2 ash性能报告分析 405 13.4 小结 416 附录a 常见的等待事件 417 后记 关于数据库的学习方法 434
Oracle中,可以使用多表关联来进行更新操作。多表关联update可以通过使用子查询或者使用Oracle提供的MERGE语句来实现。 使用子查询进行多表关联update的方式如下: 首先,我们需要编写一个SELECT语句,该语句将返回需要更新的记录。 例如,我们有两个,分别是table1和table2。我们希望将table2中的某些记录的某个字段的值更新到table1中的相应记录中。我们可以写一个SELECT语句如下: ``` SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id ``` 该SELECT语句将返回需要更新的数据。 接下来,我们需要将该SELECT语句作为子查询,与UPDATE语句结合使用,来进行更新操作。 例如,我们可以编写一个UPDATE语句如下: ``` UPDATE table1 t1 SET t1.column1 = ( SELECT t2.column2 FROM table2 t2 WHERE t1.id = t2.id ) ``` 该UPDATE语句将根据子查询的结果,将table2中的某个字段的值更新到table1中的相应记录中。 此外,还可以使用Oracle提供的MERGE语句来进行多表关联更新操作。MERGE语句可以根据指定的条件,在目标中执行插入、更新和删除操作。 例如,我们可以编写一个MERGE语句如下: ``` MERGE INTO table1 t1 USING table2 t2 ON (t1.id = t2.id) WHEN MATCHED THEN UPDATE SET t1.column1 = t2.column2; ``` 该MERGE语句将根据指定的条件,将table2中的某个字段的值更新到table1中的相应记录中。 总之,Oracle支持多表关联update操作,可以通过子查询或者使用MERGE语句来实现。使用子查询时需要将SELECT语句作为子查询与UPDATE语句结合使用;使用MERGE语句时需要指定条件,并执行相应的更新操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值