标量子查询执行计划分析及12c优化新特性-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1156319
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3760
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

about me:oracle ace pro,optimistic,passionate and harmonious. focus on oracle,mysql and other database programming,peformance tuning,db design, j2ee,linux/aix,architecture tech,etc

文章分类

全部博文(166)

文章存档

2024年(21)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: oracle

2020-09-30 16:32:19

 标量子查询执行计划分析及12c优化新特性
1. 标量子查询特点及特殊执行计划:

1)标量子查询的计划和普通计划的执行顺序不同,标量子查询虽然在上面,但是它由下面的customers表结果驱动,每行驱动查询一次标量子查询。


2)标量子查询和filter类似,如果是它们引起的性能问题,要关注是否是执行子查询的次数过多导致查询的效率不高。

3)标量子查询和filter类似,它会根据输入和输出构建hash表缓存键值对,已经查询过的键值对直接从缓存中查找,不用再次执行子查询,从而减少子查询的次数达到优化的目的,10g和11g缓存的是255个hash buckets,12c是1024个hash buckets。

如下所示:

从上面可以看出,标量子查询执行计划和普通执行计划不一样,它上面的是被下面的驱动,类似filter,谓词部分有系统绑定变量。

  下面探讨下标量子查询特点以及优化方法,对标量子查询的优化首选方式就是改写。

   标量子查询特点:子查询执行次数依赖于连接列distinct数目,重复值越多,效率越好

   反之,效率差。

   从上面执行计划可以看出,虽然驱动的a-rows有108k行,但是因为distinct数目是11,实际上标量子查询只执行11次,由此可以看出,oracle内部构建了缓存存储键值对,从而减少子查询执行次数,达到优化目的。

2. 标量子查询优化方法:
标量子查询的改写:减少标量子查询次数、改为外连接使用join。
1)减少子查询执行次数
      2)将标量子查询改为外连接
   
其中改为外连接也是12c对标量子查询优化的新特性。

3. 12c标量子查询优化新特性

    如前面所示,在12c之前,对于scalary subquery是无法unnest的,这样就导致标量子查询的执行次数受驱动表行数的影响,类似filter操作,而且scalary subquery的执行计划和普通执行计划不一样。(其实也就是查询转换改写成outer join)


select dname,

       (select max(b.sal) from scott.emp b where b.deptno = a.deptno)

  from scott.dept a; 


 
12c对标量子查询的优化如下:
 

      只对于max,min,avg单个有效(类似max||min等组合的无效),对count、查询列等无效,受参数_optimizer_unnest_scalar_sq控制。

阅读(3032) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图