duckdb的查询计划倒是很复合教科书的定义, 先将ANSI SQL转换成查询树, 生成逻辑查询计划. 然后将逻辑查询计划的节点转换成物理计划的节点.
相比于mysql的没有清晰划分的逻辑计划和物理计划, 所有操作都是对着转换后的查询树节点处理,看起来清晰了很多.
本文对逻辑计划和物理计划做一些分析. 会涉及到基于规则的优化,但是不涉及基于代价的优化.基于代价的优化随后单独分析.
https://www.youtube.com/watch?v=bXfvmeWsQ78
#0 duckdb::Planner::CreatePlan (this=0x7ffc42d9b060, statement=...) at /root/work/duckdb-dev/trunk/duckdb-0.7.1/src/planner/planner.cpp:29
#1 0x00000000045251dc in duckdb::Planner::CreatePlan (this