ITPub博客

首页 > 数据库 > Oracle > SQL优化案例-union代替or(九)

SQL优化案例-union代替or(九)

原创 Oracle 作者:沃趣科技 时间:2018-11-26 09:42:45 0 删除 编辑

随着Oracle版本的提升,优化器更趋向于智能,比如,12c中的标量子查询被transform成外连接。

select (select max(object_id) from test2 b where b.object_id =a.object_id) from test1 a;


11g中执行计划如下:

进入正题,当SQL中同时有or和子查询时,这种情况下查询无法展开(unnest),遇到这种情况只能改SQL来改变执行计划,并且在12c或18c中都没有智能改写。

select * from test1 where owner = 'SCOTT' or object_id in (select object_id from test2);


在不改写SQL的情况下我们在test2的join列上建立索引

create index idx_objid on test2(object_id);

下面用union改写sql

select * from test1 where owner = 'SCOTT' union select * from test1 where object_id in (select object_id from test2);


案例较为简单,希望通过此案例让大家了解优化器的一些行为,和unnest产生filter的一些情形。


|  作者简介

姚崇·沃趣科技高级数据库技术专家

熟悉Oracle、MySQL数据库内部机制,丰富的Oracle、MySQL故障诊断、性能调优、数据库备份恢复、复制、高可用方案及迁移经验。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28218939/viewspace-2221561/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
杭州沃趣科技股份有限公司创建于2012年(股票代码:839849),是一家专注为企业用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。公司创始团队为原阿里巴巴数据库技术团队核心骨干,凭借丰富的研发及运维经验,为行业客户提供数据库云产品及软硬件一体化解决方案。

注册时间:2016-07-18

  • 博文量
    273
  • 访问量
    826954