Sql 在红移中执行反加入的最佳方法
反连接是一种在一个表中获取元组的方法,而元组在另一个表中不匹配 我们可以通过多种方式实现反连接:Sql 在红移中执行反加入的最佳方法,sql,amazon-redshift,Sql,Amazon Redshift,反连接是一种在一个表中获取元组的方法,而元组在另一个表中不匹配 我们可以通过多种方式实现反连接: 相关子查询 不相关子查询 外部联接并检查是否为NULL 在红移中执行反连接的最佳方法是什么?在这种情况下,相关子查询不是最优的,红移的查询引擎不会将该查询解相关。如果没有实际的表布局和统计信息,以及实际的查询,很难给出明确的答案 我可以推测,这种任务需要红移端的HashJoin。如果其中一个表不是太大,并且两个表都有相同的dist键,那么可以在内存中高效地完成。带有空检查的外部连接听起来最合适,
- 相关子查询
- 不相关子查询
- 外部联接并检查是否为NULL
在红移中执行反连接的最佳方法是什么?在这种情况下,相关子查询不是最优的,红移的查询引擎不会将该查询解相关。如果没有实际的表布局和统计信息,以及实际的查询,很难给出明确的答案 我可以推测,这种任务需要红移端的HashJoin。如果其中一个表不是太大,并且两个表都有相同的dist键,那么可以在内存中高效地完成。带有空检查的外部连接听起来最合适,因为它是最可预测的-它可以做到这一点
但是实际性能将取决于许多因素,最好在有了表/查询后再回来。如果没有实际的表布局和统计信息,以及实际的查询,很难给出明确的答案 我可以推测,这种任务需要红移端的HashJoin。如果其中一个表不是太大,并且两个表都有相同的dist键,那么可以在内存中高效地完成。带有空检查的外部连接听起来最合适,因为它是最可预测的-它可以做到这一点
但实际性能将取决于许多因素,最好在有了表/查询后再回来。正如@denismo所说,没有上下文很难,但您可以尝试以下方法:
SELECT ...
FROM a LEFT OUTER JOIN b USING(key)
WHERE b.key is null
它将返回a中的行列表,这些行的键在a中不存在,正如@denismo所说,没有上下文很难,但您可以尝试以下方法:
SELECT ...
FROM a LEFT OUTER JOIN b USING(key)
WHERE b.key is null
它将返回a中的行列表,这些行的键在a中不存在为什么不尝试它们并比较时间?我认为一般来说,在任何DBI中,外部联接都比子查询好得多,因为实际上没有红移实例。我只是在理论方面做工作。如果我们适当地设置dist键和sort键,连接速度会更快,这是有道理的。反连接似乎很常见,但RedShift明确指出它不支持相关的
子查询。为什么不尝试它们并比较时间?我认为一般来说,在任何DBI中,外部联接都比子查询好得多,因为实际上没有红移实例。我只是在理论方面做工作。如果我们适当地设置dist键和sort键,连接速度会更快,这是有道理的。反连接似乎很常见,但RedShift明确提到它不支持相关的子查询不存在。