查询:
SELECT * FROM TABLE1 TBL
INNER JOIN CROSS_REF_TABLE XREF
ON TBL.COL = XREF.COL
VS
SELECT * FROM TABLE1 TBL
LEFT JOIN CROSS_REF_TABLE XREF
ON TBL.COL = XREF.COL
WHERE XREF.COL IS NOT NULL
左连接可以比内连接快吗?在我的情况下由于某种原因,我看到LEFT JOIN更快。
注意:所有表格都是随机分发的。
当我查看执行计划时,两者之间的区别在于交叉引用表上添加的分布。
LEFT JOIN:
Node 32.
[SPU Sequential Scan table "CROSS_REF_TABLE XREF" as "XREF" {}]
-- Estimated Rows = 129044, Width = 18, Cost = 0.0 .. 0.2, Conf = 100.0
Projections:
1:XREF.ORG_SK 2:XREF.COL
[SPU Distribute on {(XREF.COL)}]
[HashIt for Join]
INNER JOIN:
Node 3.
[SPU Sequential Scan table "CROSS_REF_TABLE XREF" as "XREF" {}]
-- Estimated Rows = 129044, Width = 18, Cost = 0.0 .. 0.4, Conf = 100.0
Projections:
1:XREF.ORG_SK 2:XREF.COL
[HashIt for Join]
Netezza LEFT JOIN是否进行嵌套循环或散列连接?
答案 0 :(得分:0)
虽然在某些情况下这可能是正确的,但标题中的语句极度过于简化,并且表示存在有限关联的因果关系。
如果您将主题改为“现实生活中可能会发生内连接和左连接速度不相等,即使它们在结果上相同”,所有答案都是'是& #39;
在SQL中有数百个这样的例子(=与> = AND< =,存在与'在子选择'中,与相对于相等,相比之间,event_time =(sub - 选择每个键的max(event_time)与选择key,max(event_time)等的key的连接,但结果将因数据库而异,甚至跨同一数据库的软件版本。
总是倾向于平衡这些差异(并且通常会提高性能)的一件事是更新查询中涉及的所有表的统计信息,并限制大表和限制最终结果的whereclauses之间的连接数设置最多(避免雪花 - 坚持明星)