下推是查询改写的一项重要优化,利用PolarDB-X的拆分信息来优化执行计划,使得算子尽量下推以达到提前过滤数据、减少网络传输、并行计算等目的。
Limit和Sort下推
一条SQL的执行计划在如下生成过程中,Sort和Limit被先后下推到LogicalView
算子里面。Sort和Limit下推可以达到提前过滤数据,减少网络传输、并行执行、减少PolarDB-X内存占用等效果。
> explain optimizer select * from customer order by c_custkey limit 10
Limit和Sort下推
一条SQL的执行计划在如下生成过程中,Sort和Limit被先后下推到LogicalView
算子里面。Sort和Limit下推可以达到提前过滤数据,减少网络传输、并行执行、减少PolarDB-X内存占用等效果。
> explain optimizer select * from customer order by c_custkey limit 10
拆分键不为c_nationkey
情况:
JOIN下推
JOIN下推需要满足以下条件:
- t1与t2表的拆分方式一致(包括分库键、分表键、拆分函数、分库分表数目)。
- JOIN条件中包含t1,t2表拆分键的等值关系。
此外,任意表JOIN广播表总是可以下推。
> explain optimizer select * from t1, t2 where t1.id = t2.id;
一条SQL的执行计划在如下生成过程中,JOIN下推到LogicalView
算子里面。JOIN下推可以达到计算离存储更近,并行执行加速的效果。
JOIN下推
JOIN下推需要满足以下条件:
- t1与t2表的拆分方式一致(包括分库键、分表键、拆分函数、分库分表数目)。
- JOIN条件中包含t1,t2表拆分键的等值关系。
此外,任意表JOIN广播表总是可以下推。
> explain optimizer select * from t1, t2 where t1.id = t2.id;
一条SQL的执行计划在如下生成过程中,JOIN下推到LogicalView
算子里面。JOIN下推可以达到计算离存储更近,并行执行加速的效果。