AnalyticDB 中的执行计划包括:Join Order、Join Type、Join Method、Access Method、Data Shuffle、Aggregation 等算子。

Join Order

根据查询的负载特征,提供多种关联顺序(Join Reordering)策略,主要包括Left Deep Tree (LDT)与Bushy Tree (BT)两种。其中,LDT一般适用于连结表分区对齐、优化开销相对较小、查询相对简单的场景。BT一般适用较复杂的查询场景,需要相对更长的优化时间。

说明 Join的Outer Table和Inner Table分别称为左表和右表。

Join Type

Join Type包括Inner Join、Left Outer Join、Right Outer Join、Full Outer Join、Semi/Anti Join。对应在EXPLAIN中的计划输出分别为:InnerJoin、LeftJoin、RightJoin、FullJoin、SemiJoin。

说明 Anti Join显示为Semi Join加Filter。

Access Method

单表访问默认为Index Access(通过Filter下推),充分利用AnalyticDB for MySQL全索引设计的优势,因此在查询计划中不做特别区分,一般标注为TableScan。某些特定场景可以通过指定No Index Hint规避使用索引。

Data Shuffle

在AnalyticDB for MySQL的MPP Share Nothing执行架构下,根据查询以及数据分布特性,会出现对数据进行重分布(Data Shuffling)的需求,包括对基表数据以及查询中间结果的数据重分布。Data Shuffling包括Broadcast和Repartition两种数据重分布策略,对应的EXPLAIN的计划输出分别为RemoteExchange[REPLICATED]和RemoteExchange[REPARTITION],RemoteExchange[GATHER]算子对应数据汇集。

Aggregation

无论是Data Warehouse的Batch Query还是Interactive Query,都会涉及到多种Aggregation(聚合)计算。这些聚合算子在EXPLAIN的计划中输出为Aggregation,并会标注具体的聚合算子类型。此外,对于分布式聚合计算,AnalyticDB for MySQL会根据数据特性来决定是否拆分为多步分布式聚合计算。