博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一第一篇 执行计划
阅读量:6591 次
发布时间:2019-06-24

本文共 1214 字,大约阅读时间需要 4 分钟。

第一篇 执行计划

执行计划是指示Oracle如何获取和过滤数据、产生最终结果集,是影响SQL语句执行性能的关键因素。我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行计划。

在深入了解执行计划之前,我们先了解SQL语句的处理执行过程。当一条语句提交到Oracle后,SQL引擎会分为三个步骤对其处理和执行:解析(Parse)、执行(Execute)和获取(Fetch),分别由SQL引擎的不同组件完成。SQL引擎的组件如图1-1所示。

  1. SQL编译器(SQL Compiler)
    将语句编译到一个共享游标中。SQL编译器由解析器(Parser)、查询优化器(Query Optimizer)和行源生成器(Row Source Generator)组成。

q 解析器(Parser)—执行对SQL语句的语法、语义分析,将查询中的视图展开、划分为小的查询块。

q 查询优化器(Query Optimizer)—为语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,并调用计划生成器(Plan Generator)生成计划,比较计划的代价,最终选择选择一个代价最小的计划。查询优化器由查询转换器(Query Transform)、代价估算器(Estimator)和计划生成器(Plan Generator)组成。
注意,上述优化器实际上指的是基于代价的优化器(Cost Based Optimizer,CBO),CBO也是当前采用的所有优化和调优技术的核心基础。

screenshot

查询转换器(Query Transformer)—查询转换器决定是否重写用户的查询(包括视图合并、子查询反嵌套),以生成更好的查询计划。

代价估算器(Estimator)—代价估算器使用统计数据来估算操作的选择率(Selectivity)、返回数据集的势(Cardinality)和代价,并最终估算出整个执行计划的代价。
计划生成器(Plan Generator)—计划生成器会考虑可能的访问路径(Access Path)、关联方法和关联顺序,生成不同的执行计划,让查询优化器从这些计划中选择出代价最小的一个计划。
q 行源生成器(Row Source Generator)—行源生成器从优化器接收到优化的执行计划后,为该计划生成行源(Row Source)。行源是一个可被迭代控制的结构体,它能以迭代方式处理一组数据行、并生成一组数据行。

  1. SQL执行引擎(SQL Execution Engine)
    SQL执行引擎依照语句的执行计划进行操作,产生查询结果。在每一个操作中,SQL执行引擎会以迭代方式执行行源、生成数据行。

提示:当Oracle引入一些新的优化技术时,会出现一些新的组件,例如,SQL进化管理器(SPM)、SQL性能分析器(SPA)等,这些组件会与SQL引擎的组件融合,提供更好的优化和调优方法。

转载地址:http://eouio.baihongyu.com/

你可能感兴趣的文章
JavaScript 之银弹の技法
查看>>
html+css+js开发文本编辑器,有各种排版功能!
查看>>
jQTips · 动态添加元素的清爽写法
查看>>
基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api
查看>>
webApp实战开发,仿网易新闻webApp
查看>>
利用css3修改input[type=radio]样式
查看>>
简单的文件缓存函数
查看>>
原生Js判断元素是否隐藏
查看>>
nodejs log4js配置使用
查看>>
Swift 代码小抄
查看>>
git小技巧--如何从其他分支merge个别文件或文件夹
查看>>
微信小程序——gulp处理文件
查看>>
ThoughtWorks技术雷达专区
查看>>
苏宁11.11:苏宁易购移动端的架构优化实践
查看>>
GitLab发布11.6版本,支持无服务器功能部署
查看>>
Elixir 1.3带来新的语言功能、API和改进后的工具
查看>>
旧瓶新酒之业务入云不简单
查看>>
ASP.NET Core 2加入了Razor页面特性
查看>>
一个“小白”眼中的容器
查看>>
公有云还能信任吗?Azure遭雷击中断超过一天
查看>>