NETEZZA:LEFT JOIN可以比INNER JOIN快吗?

时间:2016-10-24 08:32:19

标签: join left-join database-administration netezza

查询:

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是否进行嵌套循环或散列连接?

1 个答案:

答案 0 :(得分:0)

虽然在某些情况下这可能是正确的,但标题中的语句极度过于简化,并且表示存在有限关联的因果关系。

如果您将主题改为“现实生活中可能会发生内连接和左连接速度不相等,即使它们在结果上相同”,所有答案都是'是& #39;

在SQL中有数百个这样的例子(=与> = AND< =,存在与'在子选择'中,与相对于相等,相比之间,event_time =(sub - 选择每个键的max(event_time)与选择key,max(event_time)等的key的连接,但结果将因数据库而异,甚至跨同一数据库的软件版本。

总是倾向于平衡这些差异(并且通常会提高性能)的一件事是更新查询中涉及的所有表的统计信息,并限制大表和限制最终结果的whereclauses之间的连接数设置最多(避免雪花 - 坚持明星)