Azure Databricks中连接条件含1=1是否影响内连接执行时间及流程?
Azure Databricks中两个内连接查询的执行差异分析
假设table1是一张拥有5亿条记录的超大表,以下是对两个内连接查询的执行时间及连接流程的对比分析:
对比的两个查询
查询1
select * from table1 A join table1 b on 1=1 and b.date between a.Date-10 and a.date
查询2
select * from table1 A join table1 b on b.date between a.Date-10 and a.date
核心结论
这两个查询在执行时间、连接流程/步骤上完全没有差异,具体原因如下:
- 逻辑等价性:
1=1是永真条件,不会对连接的过滤逻辑产生任何额外限制,两个查询最终要筛选的结果集完全一致。 - Catalyst优化器的自动简化:Azure Databricks基于Spark构建,其Catalyst优化器会在查询解析阶段自动识别并移除这类无意义的永真条件。最终两个查询会被优化成完全相同的物理执行计划。
- 执行流程一致:优化后的物理计划会根据
table1的数据规模、分区情况,选择最优的Join策略(如Sort Merge Join、Broadcast Hash Join等),执行时会先完成必要的数据分区/Shuffle,再基于date的范围条件进行连接匹配,不会因为多写了一个1=1产生额外的计算开销。
内容的提问来源于stack exchange,提问作者amarender reddy jali
相关产品推荐
相关产品推荐

