MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
Public 成员函数 | Private 成员函数 | Private 属性 | 所有成员列表
OptimizeStage类 参考

Public 成员函数

RC handle_request (SQLStageEvent *event)
 

Private 成员函数

RC create_logical_plan (SQLStageEvent *sql_event, std::unique_ptr< LogicalOperator > &logical_operator)
 根据SQL生成逻辑计划 更多...
 
RC rewrite (std::unique_ptr< LogicalOperator > &logical_operator)
 重写逻辑计划 更多...
 
RC optimize (std::unique_ptr< LogicalOperator > &logical_operator)
 优化逻辑计划 更多...
 
RC generate_physical_plan (std::unique_ptr< LogicalOperator > &logical_operator, std::unique_ptr< PhysicalOperator > &physical_operator)
 根据逻辑计划生成物理计划 更多...
 

Private 属性

LogicalPlanGenerator logical_plan_generator_
 根据SQL生成逻辑计划
 
PhysicalPlanGenerator physical_plan_generator_
 根据逻辑计划生成物理计划
 
Rewriter rewriter_
 逻辑计划改写
 

成员函数说明

◆ create_logical_plan()

RC OptimizeStage::create_logical_plan ( SQLStageEvent sql_event,
std::unique_ptr< LogicalOperator > &  logical_operator 
)
private

根据SQL生成逻辑计划

由于SQL语句种类比较多,并且SQL语句可能会有嵌套的情况,比如带有SQL子查询的语句,那就需要递归的创建逻辑计划。

参数
sql_event包含SQL信息的事件
logical_operator生成的逻辑计划

◆ generate_physical_plan()

RC OptimizeStage::generate_physical_plan ( std::unique_ptr< LogicalOperator > &  logical_operator,
std::unique_ptr< PhysicalOperator > &  physical_operator 
)
private

根据逻辑计划生成物理计划

生成的物理计划就可以直接让后面的执行器完全按照物理计划执行了。 物理计划与逻辑计划有些不同,逻辑计划描述要干什么,比如从某张表根据什么条件获取什么数据。 而物理计划描述怎么做,比如如何从某张表按照什么条件获取什么数据,是否使用索引,使用哪个索引等。

参数
physical_operator生成的物理计划。通常是一个多叉树的形状,这里就拿着根节点就可以了。

◆ optimize()

RC OptimizeStage::optimize ( std::unique_ptr< LogicalOperator > &  logical_operator)
private

优化逻辑计划

当前什么都没做。可以增加每个逻辑计划的代价模型,然后根据代价模型进行优化。

参数
logical_operator需要优化的逻辑计划

◆ rewrite()

RC OptimizeStage::rewrite ( std::unique_ptr< LogicalOperator > &  logical_operator)
private

重写逻辑计划

根据各种规则,对逻辑计划进行重写,比如消除多余的比较(1!=0)等。 规则改写也是一个递归的过程。

参数
logical_operator要改写的逻辑计划

该类的文档由以下文件生成: