EXPLAIN <SELECT_STATMENT>explain select * from t1 left join t2 on t1.id = t2.id;
+---------------------------------------------------------------------------------+| query plan |+---------------------------------------------------------------------------------+| ============================================ || |ID|OPERATOR |NAME|EST.ROWS| || -------------------------------------------- || |0 |HASH JOIN | |12500.00| || |1 |├─TABLE FULL SCAN (B) |t2 |10000.00| || |2 |└─TABLE FULL SCAN (P) |t1 |10000.00| || -------------------------------------------- || Details: || ------------------------------------- || 0 - JOIN TYPE: left outer join, EQUAL: [eq(singleton.t1.id, singleton.t2.id)] || 1 - STORAGE: LIBRASTORE, BLOCK OFFSET: 1 || 2 - STORAGE: LIBRASTORE, BLOCK OFFSET: 1 |+---------------------------------------------------------------------------------+
算子名称 | 算子介绍 |
SORT | SORT 算子用于对输入的数据进行排序。 |
TOPN | 如果 ORDER BY 语句块后面还有 LIMIT 语句,优化器会进一步优化执行计划,生成 TOP-N SORT 算子,采用堆排序来选择 TOP-N 的数据。 |
LIMIT | LIMIT 算子用于限制数据输出的行数,这与 MySQL 的 LIMIT 算子功能相同。 |
FILTER | FILTER 算子用于对数据按指定谓词条件进行过滤操作,通常出现在 WHERE/HAVING/ON 子句中。 |
HASH JOIN | 利用 HASH JOIN 来进行大数据集的 JOIN 操作。优化器使用两个数据集中表,较小的那个在内存中根据 JOIN 条件构建 HASH 表,之后数据库扫描更大的数据集,探测 HASH 表找到满足关联条件的行。 |
COLUMN READ | 延迟物化算子,只读分析引擎支持下推部分过滤条件到 TableScan 算子,即先扫描过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 |
TABLE FULL SCAN | 对目标表进行全表扫描。 |
UINION | UNION 算子用于将两个查询的结果集进行并集运算。 |
WINDOW FUNCTION | WINDOW FUNCTION 算子用于实现 SQL 中的分析函数(也叫窗口函数),计算窗口内的相关行的结果,窗口函数每组可以返回多行,组内每一行都是基于窗口的逻辑计算的结果。 |
HASH GROUP BY | GROUP BY 算子主要用于在 SQL 中进行分组聚合计算操作,对于普通的聚合函数(SUM/MAX/MIN/AVG/COUNT/STDDEV)都是通过分配 GROUP BY 算子来完成。 |
PROJECTION | 投影算子,对应 SQL 语句中的 SELECT 列表,功能是将每一条输入数据映射成新的输出数据。 |
EXCHANGE RECEIVER | 数据接收算子,用于在执行 MPP 查询各个计算节点交换数据时,接收数据用。 |
EXCHAGE SENDER | 数据发送算子,用于在执行 MPP 查询各个计算节点交换数据时,发送数据用。 |
算子名称 | Detail 信息 |
SORT | ORDER BY KEY:代表排序算子所采用的排序键。 |
TOPN | ORDER BY KEY:代表排序算子所采用的排序键。 OFFSET:Limit 操作所指定的偏移量。 COUNT:Limit 操作所指定的保留行数。 |
LIMIT | OFFSET:Limit 操作所指定的偏移量。 COUNT:Limit 操作所指定的保留行数。 |
FILTER | CONDITIONS:代表 FILTER 算子在过滤数据时所采用的谓词条件。 |
HASH JOIN | JOIN TYPE:当前 JOIN 的类型,如:inner join、left outer join、semi join 等。 NON EQUAL:当前 JOIN 是否是笛卡尔积,如果没有这个字段,则代表其不是笛卡尔积。 EQUAL:显示两个表进行 JOIN 时采用的等值条件。 OTHER COND:显示两个表进行 JOIN 时的非等值条件。 此外可以看到上文中 EXPLAIN 结果中 ID 为1和2的算子名称后面分别跟了(B)和(P)标志,这两个标志标记了在进行 HASH JOIN 操作时的 Build 与 Probe 端,B 代表 Build,P 代表 Probe。 |
COLUMN READ | COLUMN READ:延迟物化所读取的列名字。 |
TABLE FULL SCAN | STORAGE:所读取的底层存储类型,目前支持两种类型,为 LIBRASTORE、TDSQL。 BLOCK OFFSET:当前表在整条 SQL 所处的 Query Block 编号,用于辅助 Hint 使用。 |
UINION | 无。 |
WINDOW FUNCTION | WINDOW FUCN DESCS:窗口函数名称。 PARTITION BY:分区键。 ORDER BY:排序所采用的排序键。 FRAME:窗口函数的窗口定义。 |
HASH GROUP BY | GROUP BY:执行聚合函数时指定的 group by key。 AGG FUNCS:SQL 中指定的聚合函数。 |
PROJECTION | EXPRS:PROJECTION 算子执行的表达式列表,主要是执行的 cast、还有各种 scalarfunc。 |
EXCHANGE RECEIVER | 无。 |
EXCHAGE SENDER | ExchangeType:交换数据采用的方式: PASS:将多个节点的数据发送往一个节点。 BCJ:将一个节点的数据广播到多个节点。例如 JOIN 时将 build 表的数据广播到各个节点,以便执行 JOIN 操作。 HASH:将数据通过 HASH 函数散列后分发到各个节点。例如用于 JOIN 时将左右两表数据打散重新分布。 HASH (BY PARTITION):当两表 JOIN,其中一个表的 join key 是 partition key 时,将另一个表按照 join key 是 partition key 的表分布方式 shuffle 出去。 |
/*+ HASH_JOIN_PROBE(t1) */
表示优化器将强制采用 t1表作为 hash join 中的 probe 表。
本页内容是否解决了您的问题?