Oracle SQL优化–原理篇

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Oracle SQL优化–原理篇,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


内容会持续更新!!

一. 优化器与成本

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. 其他的访问路径:这部分包括视图、集合、层次查询等访问方式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155790.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!