数据库优化器

数据库的优化器在我看来就好比是人的大脑。当我们的用户(可能是一条sql也可能是一个application,也可能是多个sql,多个application)在访问数据库的时候,优化器会给sql或者是app的请求提供最优质的服务。SQL是结构化的查询语言,他在执行的时候也是需要编译才能够被系统识别的,但是不同于其他面向对象或者是过程的开发语言,SQL并不要制定访问逻辑,你需要做的只是告诉数据库你要得到什么,至于如何才能够帮助你收集到制定的数据的工作,是数据库来完成的,具体的来说主要是靠优化器来完成的

在讨论优化器的定义,运行机制之前,我们先来看看SQL的执行过程。

1.语法检查:面对迎面而来的SQL,数据库要做的是看看当前的sql是否是一个合法的公民,即是否合乎语法,如检查无误,则放行,并将sql的信息做个记录,将sql语句转化成优化器能够识别的关系代数语句,并生成语法树

2.语义检查:sql 的合法性检查完成之后会继续检查语义,我的理解是看你要解决的问题是不是数据库这里能够解决的,如果能则继续,并添加一些相关的约束信息到语法树里面,如约束,触发器,视图等

3.查询重写:这是sql 优化器的开始,查询重写器是优化器的三大组件之一。当发现我们的sql本身效率并不高,他会重写sql,将sql转化成效率更高的语句。这种优化可以是基于查询成本的考虑,也可以是基于查询规则的考虑

4.查询访问计划:访问计划告诉我们 表的访问顺序,join的方法,是否使用index  scan,选用哪个索引比较高效。根据sql语句生成的语法树提供的信息,优化器能够生成许多访问方案,然后在根据语义检查过程中添加的各种编目信息,如,表,索引,列和函数等各种统计信息。之后通过第二大组件--成本估算器来帮助我们选择最合适的访问计划。

5.生成访问计划:由第三大组件计划生成器完成

6.执行访问计划:获取查询结果集。


接下来重点分析access plan的选择是如果进行的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle数据库优化器是一个计划生成器,用于为SQL语句生成执行计划。它的工作是在执行SQL语句之前对该语句进行解析,并根据语句的特征,结合当前数据库的状态,生成一个最优的执行计划。这个计划告诉数据库引擎如何执行该SQL语句,以获得最快的执行时间。 优化器使用多种方法来选择最优的执行计划,包括使用索引、进行表连接和使用各种优化技术。Oracle数据库也提供了许多参数,可以用来控制优化器的行为,并在特定情况下使用不同的优化策略。 优化器对于数据库性能至关重要,因此在设计和维护数据库时,需要关注优化器的工作原理并了解如何使用它。 ### 回答2: Oracle数据库优化器是Oracle数据库管理系统的一个重要组件,它负责处理SQL语句的执行计划的生成和选择,以提高SQL查询的性能。 优化器首先会通过语法分析和语义分析对SQL语句进行解析,确定SQL语句的逻辑意义和语义。然后,它会评估各种执行路径和执行计划,并根据成本估算器进行成本估算,以找出最佳的执行计划。 优化器会利用统计信息来进行成本估算,统计信息包括表的行数、列的唯一值个数、索引的选择性等。这些统计信息可以由Oracle数据库自动收集(通过执行收集统计信息的命令)或手工收集。 优化器选择执行计划时,会考虑多个因素,包括成本、I/O消耗、CPU消耗、内存消耗等。它会根据这些因素选择最佳的执行计划,以提高SQL查询的性能和效率。 在使用优化器时,可以通过调整一些参数来改变优化器的行为,例如通过修改查询优化目标参数来选择不同的优化模式,或通过修改统计信息的收集方式来影响优化器的决策。 总之,Oracle数据库优化器是一个非常重要的组件,它可以根据查询语句和统计信息选择最佳的执行计划,从而提高SQL查询的性能和效率。了解和掌握优化器的原理和使用方法,对于数据库性能优化和SQL调优是非常有帮助的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值