持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
我要一步一步往上爬~大家好我是青三阿,今天我们来一起学习一下Columbia优化器的四个概念。
逻辑运算符 & 查询树
逻辑运算符
高级运算符,它指定了数据转换,而不需要指定要使用的物理执行算法。
关系模型里,逻辑运算符通常将多表作为输入,并输出单表。
每个逻辑运算符接受固定数量的输入(称为运算符的arity)
两种常见的而逻辑运算符:
GET:没有输入,有一个参数(存储关系的名称)。EQJOIN:有左右两个需要join的表输入,一系列和左右表相关的Join谓词作为参数
查询树
查询树是一个query以树的形式表现出来,作为优化器的输入。
通常表现为逻辑运算符树,每个节点都是一个逻辑运算符,具有0/多逻辑运算符的输入。
每个节点的子节点就是这个节点的arity,叶子节点的arity=0。
查询树说明了每个操作符应用的顺序,上述例子中:
EQJOIN有两个输入,它们是GET的输出EQJOIN的Emp.dno=Dept.dno参数是join的条件,输出即查询结果GET没有输入,他们是叶子节点,它的参数定义了将会检索哪个存储关系
物理运算符 & 执行计划
物理运算符
物理运算符是实现特定数据库操作的特定算法,数据库里可以使用一个/多个物理执行算法去实一个查询逻辑运算符。举例:
逻辑运算符EQJOIN:可以用nested-loops/sort-merge等算法实现物理运算符- nested-loops算法对应物理运算符是
LOOPS_JOIN - sort-merge对应的是
MERGE_JOIN物理运算符 GET逻辑运算符 → 扫表表的算法 →FILE_SCAN物理运算符
- nested-loops算法对应物理运算符是
执行计划
用物理运算符替换查询树里的逻辑运算符,就有了执行计划。
执行计划可以评估一个查询,因为每个计划都有代价模型和catalog信息,
这四个概念理解清楚就对理解SQL执行流程有很大的帮助~