# 逻辑优化-连接顺序调整

![left](./student-guide/diagram/16-Connection-adjustment-01-01.png)

-------------------------------------------------------------
通过对抽象语法树中参数连接的输入算子的提取，从而抓取基本表。再计算各个算子的统计信息，统计信息包括列统计信息，直方图以及数据列 NDV 值，就可以得到连接操作的基础数据。如果数据量较小，那么对于小规模连接用动态规划求解最优连接顺序；如果数据量比较多，那么对于大规模连接用贪心算法求解次优连接顺序 。这里提到了两种算法分别为： 
  - 贪心算法：行数最小表 和 其他表 join 估值，选择 cost 最小的。
  - 动态规划：自底向上，分别计算每层最优解，然后根据穷举并计算中间结果集后，选择除最优解。

我们将  t1, t2, t3 抽象为三层计算
第一层：t1, t2, t3 分别求得最优解方式；
第二层：参与的表每 2 张表 join 分别求得最优解方式；
第三层：使用第二层和第一层求得最优解，进行穷举计算中间结果集，选择里面最优的 join 方式。
