一文掌握数据库最核心的功能——优化器

导读:优化器是数据库最核心的功能,也是最复杂的一部分。它负责将用户提交的SQL语句根据各种判断标准,制定出最优的执行计划,并交由执行器来最终执行。优化器算法的好坏、能力的强弱,直接决定了语句的执行效率。

作者:韩锋

来源:华章计算机(hzbook_jsj)

MySQL、PostgreSQL、SQLServer等关系型数据库综合比较来说,Oracle的优化器是功能最强大的。学习SQL优化,从本质来讲就是学习从优化器的角度如何看待SQL,如何制定出更优的执行计划。当然,优化器本身是数据库系统中最为复杂的一个部分,本文会就优化器的分类、工作原理等做简单介绍。

成本是优化器(基于成本的优化器)中反映SQL语句执行代价的一个指标。优化器通过比较不同执行计划的成本,选择成本最小的作为最终的执行计划。如何理解成本、成本如何计算也就成为我们学习基于成本的优化器的关键所在。

优化器在整个SQL语句的执行过程中充当了非常重要的角色。图1是一个SQL语句从提交到最终得到结果的示意图,从中我们可以看到优化器充当的角色及其主要功能。

图1 SQL语句执行过程

Oracle的优化器也是在不断演变中的。在早期的版本中,Oracle使用一种基于规则的优化器。顾名思义,它是按照某种特定的规则来制定执行计划的。这种方式比较简单直观,但对数据库自身情况及SQL语句中对象本身的情况都没有考虑。在后期的Oracle版本中,又推出了另外一种优化器——基于成本的优化器。下面将对两种主要的优化器分别加以介绍,并对和优化器相关的数据库参数和提示进行说明。

 

基于规则的优化器

基于规则的优化器(Rule Based Optimizer,RBO)内部采用了一种规则列表,其中每一种规则代表一种执行路径并被赋予一个等级,不同的等级代表不同的优先级别。等级越高的规则越会被优先采用。Oracle会在代码里事先给各种类型的执行路径定一个等级,一共有15个等级,从等级1到等级15。Oracle会认为等级值低的执行路径的执行效率比等级值高的执行效率高。在决定目标SQL的执行计划时,如果可能的执行路径不止一条,则RBO就会从该SQL多种可能的执行路径中选择一条等级最低的执行路径来作为其执行计划。

01 RBO的具体规则

下面我们就来看看RBO的具体规则,如表1所示。

表1 RBO规则

下面针对表1中所示的每一种规则的含义及其用法进行说明。

  • Single Row by Rowid:根据ROWID,返回一条记录。这种规则发生在SQL语句的WHERE部分,指定了记录的ROWID或者使用了CURRENT OF CURSOR形式的SQL。

  • Single Row by Cluster Join:根据聚簇连接,返回一条记录。这种规则发生在SQL语句中WHERE部分,包含了两表关联,且关联字段为一个聚簇,同时还存在一个过滤条件为一个表的唯一索引或主键。

  • Single Row by Hash Cluster Key with Unique or Primary Key:根据哈希聚簇键,返回一条记录。这种规则发生在SQL语句的WHERE部分所包含的过滤条件中,字段是一个哈希聚簇键且这个字段为唯一或主键索引字段。

  • Single Row by Unique or Primary Key:根据主键或唯一索引键值,返回一条记录。这种规则发生在SQL语句中WHERE部分,为唯一或主键所有字段的等值连接条件。

  • Clustered Join:根据聚簇连接,返回一组记录。这种规则跟Path 2类似,只不过过滤条件中没有唯一限制,可以返回多条记录。

  • Hash Cluster Key:根据哈希聚簇键值,返回一条记录。这种规则跟表2-1所示Path 3类似,只不过过滤条件中没有唯一限制,可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值