Columbia优化器--基本概念(二)

346 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

我要一步一步往上爬~大家好我是青三阿,今天我们来一起学习一下Columbia优化器的四个概念。

逻辑运算符 & 查询树

逻辑运算符

高级运算符,它指定了数据转换,而不需要指定要使用的物理执行算法。

关系模型里,逻辑运算符通常将多表作为输入,并输出单表。

每个逻辑运算符接受固定数量的输入(称为运算符的arity

两种常见的而逻辑运算符:

  • GET:没有输入,有一个参数(存储关系的名称)。
  • EQJOIN:有左右两个需要join的表输入,一系列和左右表相关的Join谓词作为参数

查询树

查询树是一个query以树的形式表现出来,作为优化器的输入。

通常表现为逻辑运算符树,每个节点都是一个逻辑运算符,具有0/多逻辑运算符的输入。

每个节点的子节点就是这个节点的arity,叶子节点的arity=0

image.png

查询树说明了每个操作符应用的顺序,上述例子中:

  • EQJOIN有两个输入,它们是GET的输出
  • EQJOINEmp.dno=Dept.dno参数是join的条件,输出即查询结果
  • GET没有输入,他们是叶子节点,它的参数定义了将会检索哪个存储关系

物理运算符 & 执行计划

物理运算符

物理运算符是实现特定数据库操作的特定算法,数据库里可以使用一个/多个物理执行算法去实一个查询逻辑运算符。举例:

  • 逻辑运算符EQJOIN:可以用nested-loops/sort-merge等算法实现
  • 物理运算符
    • nested-loops算法对应物理运算符是LOOPS_JOIN
    • sort-merge对应的是MERGE_JOIN物理运算符
    • GET逻辑运算符 → 扫表表的算法 → FILE_SCAN物理运算符

执行计划

image.png

用物理运算符替换查询树里的逻辑运算符,就有了执行计划。

执行计划可以评估一个查询,因为每个计划都有代价模型catalog信息,

这四个概念理解清楚就对理解SQL执行流程有很大的帮助~