SQL查询和优化(十五)
来源:互联网 发布:房产软件有哪些 编辑:程序博客网 时间:2024/06/07 14:23
我们来生成一些模拟数据如下:DROP TABLE t_object RURGE;DROP TABLE t_tables PURGE;CREATE TABLE t_objects AS SELECT * FROM dba_objects;CREATE TABLE t_tables AS SELECT * FROM dba_tables;ALTER TABLE t_objects ADD tablespace_name VARCHAR2(30);
现在需要把t_tables.tablespace_name 同步至 t_objects.talbespace_name,一般常用的是UPDARE:UPDATE t_objects o SET o.tablespace_name = (SELECT t.tablespace_name FROM t_tables t WHERE t.owner = o.owner AND t.table_name = o.object_name)WHERE EXISTS(SELECT t.tablespace_name FROM t_tables t WHERE t.owner = o.owner AND t.table_name = o.object_name);注意上面的写法:两个子查询要保持一致,这样不会更新新范围之外的数据,也容易维护
像这种关联更新一般要改为MERGE,因为UPDATE语句有两次扫描t_tables表,而且其中一次相当于标量子查询改写方法如下:1、目标表(t_objects o)放在MERGE INTO后面2、源表(t_tables)放在USING后面3、关联条件(t.owner = o.owner AND t.table_name = o.object_name)放在on后面,注意关联条件放在括号里,否则会报错。4、更新句子( SET o.tablespace_name = t.tablespace_name).注意:只能更新目标表,所以 o.tablespace_name一定要放在前面。MERGE INTO t_objects oUSING t_talbes t ON(t.owner = o.owner AND t.table_name = o.object_name)WHEN MATCHED THEN UPDATE SET o.tablespace_name = t.tablespace_name;去掉了“标量子查询”,对t_tables只扫描了一次
选自《Oracle 查询优化改写技巧与案例》 有教无类 落落 著
阅读全文
0 0
- SQL查询和优化(十五)
- SQL查询和优化(一)
- SQL查询和优化(二)
- SQL查询和优化(三)
- SQL查询和优化(四)
- SQL查询和优化(五)
- SQL查询和优化(六)
- SQL 查询和优化(七)
- SQL查询和优化(九)
- SQL查询和优化(十)
- SQL查询和优化(十一)
- SQL查询和优化(十二)
- SQL查询和优化(十三)
- SQL优化和查询(十六)
- ORACLE SQL性能优化系列(十五)
- SQL查询和优化(八)
- SQL优化和查询(十七)
- SQL查询和优化(十四)——用分析函数优化标量子查询
- 浅谈HTML中的行块标签
- java每日一练
- Overfitting
- HIVE学习笔记
- JVM调优 基于分代策略
- SQL查询和优化(十五)
- 不再跳票Fedora 26 正式发布!
- gb2312 转 utf-8
- Angular4 + Material2
- OkHttp工具类+RecyclerView+点击事件+Glide显示图片
- Android基础总结四:BroadcastReceiver总结二(广播权限设置)
- C++调用Object-C
- Linux下安装JDK
- 漫谈分布式系统:三种通信范型