NETEZZA:LEFT JOIN 能比 INNER JOIN 快吗?
Posted
技术标签:
【中文标题】NETEZZA:LEFT JOIN 能比 INNER JOIN 快吗?【英文标题】:NETEZZA: Can LEFT JOIN be faster than INNER JOIN? 【发布时间】:2016-10-24 08:32:18 【问题描述】:查询:
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 更快。
注意:所有表格都是随机分布的。
当我查看执行计划时,两者之间的区别在于交叉引用表上添加的分布。
左连接:
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]
内部连接:
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 是做嵌套循环还是散列连接?
【问题讨论】:
肯定它选择的连接操作将基于估计的行数,而不是左连接或内连接的选择。 您问题中的两个查询是相同的,并且使用的是外连接 内连接和左连接返回两个不同的结果,主要问题应该是:我需要什么结果? 问题不在于结果是什么。我们可以通过在 where.c 语句中添加额外的条件来很好地实现我们想要的目标 问题类似***.com/questions/2726657/… 【参考方案1】:虽然在某些情况下这可能是正确的,但标题中的陈述过于简单化,并表明仅存在有限相关性的因果关系。
如果您将主题更改为“在现实生活中是否会发生内连接和左连接在速度上不相等,即使它们的结果相同”,所有答案都是“是”
在 SQL 中有数百个这样的例子(= 与 >= AND
总是倾向于消除这些差异(并且通常会提高性能)的一件事是更新查询中涉及的所有表的统计信息,并限制大表与限制最终结果的 where 子句之间的连接数设置最多(避免雪花 - 坚持明星)
【讨论】:
以上是关于NETEZZA:LEFT JOIN 能比 INNER JOIN 快吗?的主要内容,如果未能解决你的问题,请参考以下文章
sql语法:inner join on, left join on, right join on详细使用方法