You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Presto中LEFT JOIN/INNER JOIN的查询优化问题

Presto中JOIN写法对查询效率的影响

LEFT JOIN场景:两种写法有本质差异

首先要明确:这两种LEFT JOIN写法的结果集完全不同,不存在“哪种更高效”的选择问题——因为它们对应不同的业务逻辑:

  • 写法1:SELECT * FROM TABLE A LEFT JOIN TABLE B ON col_a = col_b
    保留大表A的所有行,仅将匹配col_a=col_b的B表数据关联进来,不匹配的B表字段用NULL填充。结果集行数≥A表行数,是一个超大结果集。
  • 写法2:SELECT * FROM TABLE B LEFT JOIN TABLE A ON col_a = col_b
    保留小表B的所有行,仅将匹配col_a=col_b的A表数据关联进来,不匹配的A表字段用NULL填充。结果集行数≥B表行数,是一个极小结果集。

如果业务需求是保留大表A的全部数据,只能用写法1;如果需求是保留小表B的全部数据,就用写法2。从执行效率看,写法2的整体查询耗时会远低于写法1,因为结果集大小差距极大;但这是业务逻辑决定的,而非写法优化的选择。

另外,Presto的查询优化器在处理JOIN时,会自动识别小表并执行广播连接(Broadcast Join):把小表数据分发到各个存储大表分片的节点,避免大表数据跨节点移动。无论LEFT JOIN的左表是大表还是小表,优化器都会优先广播小表,所以JOIN阶段的执行效率本身差异不大,核心差异还是结果集的大小。

INNER JOIN场景:两种写法无差异

对于INNER JOIN,SELECT * FROM TABLE A INNER JOIN TABLE B ON col_a = col_b和SELECT * FROM TABLE B INNER JOIN TABLE A ON col_a = col_b的结果集完全一致(仅列的顺序可能不同)。

Presto的优化器会自动忽略表的书写顺序,识别出小表B并将其作为广播表,执行广播连接优化。因此两种写法的执行效率几乎没有差异,不需要特意调整表的顺序。

内容的提问来源于stack exchange,提问作者Shlim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:02:16