gpt4 book ai didi

join - Redshift - 带 OR 的高效 JOIN 子句

转载 作者:行者123 更新时间:2023-12-04 17:54:58 25 4
gpt4 key购买 nike

我需要使用 OR 条件将一个巨大的表(超过 1000 万行)连接到一个查找表(超过 15000 行)。像这样的东西:

SELECT t1.a, t1.b, nvl(t1.c, t2.c), nvl(t1.d, t2.d)
FROM table1 t1
JOIN table2 t2 ON t1.c = t2.c OR t1.d = t2.d;

这是因为 table1 可以将 cd 作为 NULL,我想加入任何一个可用的,省略其余的部分。查询计划说有一个嵌套循环,我意识到这是因为 OR 条件。有没有一种干净、有效的方法来解决这个问题?我正在使用 Redshift。

编辑:我正在尝试使用 UNION 运行它,但它似乎并没有比以前更快。

最佳答案

如果您有首选专栏,您可以NVL()(又名COALESCE())并加入其中。

SELECT t1.a, t1.b, nvl(t1.c, t2.c), nvl(t1.d, t2.d)
FROM table1 t1
JOIN table2 t2
ON t1.c = NVL(t2.c,t2.d);

我还建议您将查找表设置为 DISTSTYLE ALL 以确保不会重新分配较大的表。

[ 此外,1000 万行对于 Redshift 来说并不大。并不是说我们在 Redshift 上获得了出色的性能,即使是在查询(和连接)具有数千亿行的表时,也不要自以为是。 ]

关于join - Redshift - 带 OR 的高效 JOIN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41092500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com