Oracle SQL优化--原理篇


内容会持续更新!!

一. 优化器与成本

1. 优化器

优化器是数据库核心功能,也是最为复杂的一块。负责将用户提交的SQL语句根据各种判断标准,制定出最优的执行计划,并交给执行器来执行。
成本是优化器(基于成本的优化器)中反映SQL执行代价的一个指标。

1.1 RBD

基于规则的优化器(Rule Based Optimizer,RBD)。内部采用规则列表,等级越高的规则越会被优先采用。

1.2 CBD

基于成本的优化器(Cost Based Optimizer,CBD)。成本越低,SQL执行的代价越小, 则是一个更优的执行路径。CBD基本上是首选。

2. 成本

成本是优化器(基于成本的优化器)中反映SQL执行代价的一个指标。
是指花费在单数据块读取上的时间,加上花费在多数据块上的时间,再加上所需的CPU处理时间,然后将总和除以单数据块读取所花费的时间。
在执行计划中,可以看到成本(cost)那一列的值。

二. 执行计划

1. 执行计划

Oracle用来执行目标SQL语句的这些步骤的组合就被称为执行计划
执行计划的步骤Id前面带有*号,说明这个操作有相关的谓词条件(访问条件或过滤条件)

数据库生成执行计划,是一个开销很大的工作。因此,一般数据库都会采取缓存策略。将生成好的执行计划保存起来,为了下次可以重用它,避免了再次生成产生开销。在Oracle数据库中有一块内存区域称为库高速缓存(library cache,它是共享池的一部分)。用户执行的SQL语句或者PL/SQL块,其执行计划会被缓存在这个区域中。它的作用就是当相同的SQL语句或者PL/SQL块再次执行时,就可以直接利用缓存在该区域中的执行计划,而不用再进行昂贵的解析操作。

在Oracle数据库中,每条SQL语句都有一个称为SQL_ID的唯一标识。在对一条SQL语句的解析中,Oracle会查询在库高速缓存中是否存在SQL_ID。如果不存在,则会申请一块内存区域用来保存解析后的结果。在逻辑上,这块内存区域保存的数据结构称为游标。在内存区域中,一部分是与SQL语句相关的,被称为父游标;另一部分是与语句的执行计划相关的,被称为子游标。从名字就可以看出,两者是有主从关系的。对于同一条SQL语句,可能会存在多个子游标,我们称之为不同版本的子游标。不同的子游标会有其执行计划可能相同,也可能不同;但它们都属于同一个父游标。每个子游标都会被赋予一个序列号,即CHILD_NUMBER。一条语句生成的第一个游标的CHILD_NUMBER为0,相应的Oracle会为每个执行计划生成一个哈希值以作区分。

可以通过下面的对象来查看:
V$SQLAREA
V$SQL

2. 执行顺序

  • 执行计划是由很多步骤组成的,步骤之间有一定的执行顺序。每个步骤都有一个编号。
  • 步骤之间存在父子关系。父子关系是通过缩进来体现的,子节点会较父节点向右缩进。而父节点就是子节点上面离它最近的左移节点。
  • 父子节点之间的缩进结构形成了一个树形图。真正执行顺序是从树形顶部开始,自上而下、自左向右寻找,寻找缩进层次最深且没有子节点的节点,首先执行此节点。此后执行此节点同级的节点,执行顺序从上而下。在树形结构中,如果某个节点还有子节点,则先执行子节点;执行结果不断上移到父节点,直到汇总到顶级节点。

3. 访问路径

在执行计划中的Operation列,对应的就是访问路径,即这个步骤是如何访问数据的。常见的有如下的一些分类:

  1. 表相关的访问路径:这部分主要包括ROWID表扫描、采样表扫描、全表扫描三种方式。即针对表的访问,可以按照上面三种方式中的一种进行。
  2. 索引相关的访问路径:这部分又可分为B树索引访问路径和位图索引访问路径。B树索引访问路径主要包括索引唯一扫描、索引范围扫描、索引全扫描、索引快速全扫描、索引跳跃扫描等方式。位图索引访问路径包括位图索引单键扫描、范围扫描、全扫描、快速全扫描及按位与、或、减等方式扫描。
  3. 表关联相关的访问路径:这部分主要包括嵌套循环连接、排序合并连接、哈希连接、笛卡儿连接等方式。
  4. 和SORT相关的访问路径:这部分包括聚合、去重、分组、排序等排序访问方式。
  5. 其他的访问路径:这部分包括视图、集合、层次查询等访问方式。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在sql语句执行的生命周期中所处的位置和作用,sql引擎如何生成执行计划以及如何获取sql语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“sql优化技术”深入分析oraclesql优化技术,包括逻辑优化技术和物理优化技术。用大量示例详尽分析oracle 中现有的各种查询转换技术,先分析oracle如何收集、统计系统和对象的数据,然后推导各种代价估算公式,给出各种情形下的代价计算演示。 第三篇“sql调优技术”深入剖析oracle提供的各项调优技术。先对语句实际运行的性能统计数据进行了深度分析,介绍各项统计数据是由什么操作导致的以及如何统计。然后介绍如何对sql语句进行优化以获得稳定、高效的性能。最后,依据对sql优化及调优技术的分析,介绍如何快速优化sql的思路。 《oracle 高性能sql引擎剖析:sql优化与调优机制详解》内容丰富且深入,破解了oracle技术的很多秘密,适合oracle数据库管理员、应用开发人员参考。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值