数据库优化器

数据库的优化器在我看来就好比是人的大脑。当我们的用户(可能是一条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的选择是如果进行的

展开阅读全文

没有更多推荐了,返回首页