富联注册: 叶菜类  根茎类  果实类  主食厨房 
全国服务热线:0898-08980898
富联资讯
当前位置: 首页 > 富联资讯
数据库优化器与算子优化
添加时间:2024-06-18
  

优化器是数据库中用于把关系表达式转换成执行计划的核心组件,很大程度上决定了一个系统的性能

优化器会包含一系列优化规则,这些优化规则可以对关系表达式进行等价转换,从而生成执行计划

  • :数据源,也就是我们语句中的表,中的
  • :选择, 条件,如中的后的过滤条件
  • :投影,指搜索选择的列,如中的列
  • :连接,如就是把两个表做,连接条件是最简单的等值连接,当然还有其他我们熟知的,,等等
  • :排序,如里面的,无序的数据通过这个算子处理后,输出有序的数据
  • :分组,如中的,按照某些列进行分组,分组后可以进行一些聚合操作,比如等等
  • :子查询,如中的,可以进行嵌套查询

将外层查询块子句中的谓词移入所包含的较低层次的查询块,从而能够提前进行数据过滤以及更好的使用索引

举例

比如对于表(100条数据),(100条数据),对于查询语句

执行

  • 直接执行:执行时候是把和两个表做笛卡尔积,需要处理10000条数据,然后再根据条件进行过滤
  • 进行谓词下推:比如的数据有10条,的有5条,先进行过滤我们所需要处理的数据条数则只有50条了,这就是尽量把过滤条件往下推到子节点上,就可以避免访问很多数据,从而达到优化的效果

对于算子的谓词下推

  • 算子,直接将过滤条件推给各个算子即可
  • 对于算子,则会首先进行简化,将外连接转化为内连接,收集连接条件,区分出哪些来自于的左节点哪些来自于的右节点,分别像左右节点进行下推

注意点

不能下推,因为先进行再做操作和先做操作再得到的结果是不一样的

对于没用到的列,则没有必要读取它们的数据去浪费无谓的

举例

比如我们有一张表,它含有四列数据

当我们执行查询时,中只有两列被用到了

  • 算子用到列
  • 算子用到列

那么读取数据时,两列则不需要读取,可以裁剪掉

总结

列裁剪的算法就是自顶向下的把算子过一遍,某个节点需要用到的列就等于它自己需要用到的列加上它的父节点所需要用到的列,这样得到整个语句所涉及到的列,从而再读取数据时只读取需要的列即可

在编译优化时,多个变量进行计算时,而且能够直接计算出结果,那么变量将由常量直接替换

举例

比如会转换为

常量传播,在编译优化时,将能够计算出结果的变量替换为常量

实现逻辑

依赖一种叫做()的前向数据流分析(),要确定某个定值能被传播到哪些使用点,或者反过来说,某个使用点上应该采用哪个版本的定值,如果在某个使用点上发现应该使用的定值是一个常量的话,就可以在此处做诸如常量折叠之类的常量优化了

举例

  • 一看就能看出来,不存在的值,但是未经优化的会进行全表扫描查询和,这个时候就需要优化语句,从而消除无用的节点,判断是否存在结果

  • 可以优化为

投影消除是把不必要的给消除掉

如果算子需要投影的列跟子节点的输出列一样,那么这个投影就是一个废操作,可以被消除掉

举例

  • 如果再表中刚好只有两列,也就是的输出和需要投影的列一样,那么这时候就没必要在之后再做一次操作了
  • 这条语句里面有两个,分别是最上层的和它的子节点那么这个节点就是废操作,可以被消除掉如果的子节点还是的话,那么子节点的就没有意义了,可以干掉
  • 在某种意义上也属于投影操作,因为从这个节点出来的都是列的概念,比如等,因此在的过程中,这个也是可以被消除掉的

最大最小消除严格上说不是标准逻辑优化里面需要做的事情

举例

  • 最小消除:生成的逻辑执行计划是一个 上面接一个 ,也就是说这是一个全表扫描的操作

    可以转换为生成的逻辑执行计划是,在某些情况,比如是主键或者是存在索引,数据本身是有序的, 就可以消除,最终变成 或者 加 ,这样子就不需要全表扫了,读到第一条数据就得到结果

  • 最大消除 优化为
  • 最小消除: 优化为

基于规则的优化器()

根据优化规则对关系表达式进行转换,一个关系表达式经过优化规则后会变成另外一个关系表达式,同时原有表达式会被裁剪掉,经过一系列转换后生成最终的执行计划

中包含了一套有着严格顺序的优化规则,同样一条,无论读取的表中数据是怎么样的,最后生成的执行计划都是一样的

在中写法的不同很有可能影响最终的执行计划,从而影响脚本性能

执行过程

  1. 遍历关系表达式,只要模式能够满足特定优化规则就进行转换,生成了一个逻辑执行计划,但这只是逻辑上可行

  2. 将逻辑执行计划成物理执行计划,即决定各个的具体实现,如算子的具体实现选择

基于代价的优化器()

根据优化规则对关系表达式进行转换,一个关系表达式经过优化规则后会生成另外一个关系表达式,同时原有表达式也会保留,经过一系列转换后会生成多个执行计划,然后会根据统计信息和代价模型()计算每个执行计划的,从中挑选最小的执行计划

中有两个依赖:统计信息和代价模型,统计信息的准确与否、代价模型的合理与否都会影响选择最优计划

执行过程


  1. 根据优化规则进行等价转换,生成等价关系表达式,此时原有关系表达式会被保留

  2. 决定各个的具体实现

  3. 根据统计信息计算各个执行计划的,选择最小的执行计划

优于的原因

是一种只认规则,对数据不敏感的呆板的优化器,而在实际过程中,数据往往是有变化的,通过生成的执行计划很有可能不是最优的

目前各大数据库和大数据计算引擎都倾向于使用,例如等等

优化器原理——查询优化器综述

优化之谓词下推和常量优化

优化器执行过程之逻辑算子

0898-08980898
手机:
13966668888
邮箱:
admin@youweb.com
电话:
0898-08980898
地址:
海南省海口市

平台注册入口