【问题标题】:Unnecessary DS_BCAST_INNER after GROUP BY in RedshiftRedshift 中的 GROUP BY 后不必要的 DS_BCAST_INNER
【发布时间】:2015-06-27 08:15:11
【问题描述】:

我有一个问题,想知道是否有解决办法。

我的查询中有绝对不必要的表广播(DS_BCAST_INNER)。

假设您有 Table1 和 Table2 都具有相同的 distkey MediaId。

当我直接加入两个表时,没有重新分配是好的。但是当我尝试做类似的事情时:

WITH t1
AS
(
SELECT MediaId, ... FROM Table1 ...predicates... GROUP BY MediaId, ...
),
t2 AS
(
SELECT MediaId, ... FROM Table2 ...predicates... GROUP BY MediaId, ...
)
Select ... FROM t1 JOIN t2 ON t.MediaId = t2.MediaId ....

我在解释命令显示的执行计划中看到DS_BCAST_INNER,但它显然没用。

如何避免?

【问题讨论】:

  • 我也有同样的问题。你搞清楚了吗?

标签: database query-optimization amazon-redshift


【解决方案1】:

对此运行EXPLAIN 并查看表的基础数据类型(在分组依据之前)。

我最近看到 Table1 是 char(36) 而 Table2 是 varchar(36);这导致了强制转换和广播,因为 char 和 varchar 的散列(可能)不同。 (varchar 将有一个长度前缀,可能包含在哈希中...... :-( )

连接上的数据类型必须完全相同,而不是几乎相同。例如。 INTBIGINT 可能会有同样的问题。

(还没有检查过这个,但可能甚至可以为空?)

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2018-02-28
    • 2020-02-08
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多