找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 924|回复: 0

此问题并使 JOIN 更快

[复制链接]

1

主题

0

回帖

5

积分

新手上路

积分
5
发表于 2023-11-26 12:38:46 | 显示全部楼层 |阅读模式
重写查询 以选择表的所有 443,744 行,然后解析应用程序内存中的每一行。这样做将从您的 Redshift 数据库中删除 374,371 个查询。这样一个查询只需几秒钟,而不是 125 分钟。 使用 Amazon RDS 和 DBLINK 将 Redshift 用作 OLTP。在“拥有你的 Postgres 蛋糕并吃掉它”一文中,我们详细描述了这种方法。 仅在需要连接表时才使用 DISTKEY 分布样式是一个表属性,决定如何在 Amazon Redshift 集群中的节点之间分布给定表的行。选择正确的分布方式对于查询性能非常重要。 选择分发方式时需要牢记两个主要考虑因素: 最大限度地减少跨节点的数据移动,由于网络 I/O 和磁盘 I/O,这种移动的成本很高。

在集群中均匀分布数据,以最大限度地提高查询性能并最大限度地减少行偏差。我们将在下面介绍“行倾斜”。 基于偶数的分布 默认分配方式为“偶数”。对于给定的表,所有节点都包含相同数量的行。“偶数”分配 电子邮件营销列表 方式的优点是: 表扫描速度很快,因为所有节点都有相同的工作负载 由于不存在行倾斜,因此节点的磁盘利用率是相同的。我们在下面解释什么是“行倾斜”。 但是,在连接两个表时,“偶数”分布并不是最佳的。考虑一下当两个表连接时会发生什么: 选择表1的数据 选择表2的数据 将数据移动到单个节点(位于同一位置) 连接该节点上的数据并存储结果 并且查询执行从这里继续。 通过均匀分布,很容易看出步骤 3 需要在节点之间移动数据。



这并不理想,因为它需要网络(广播)流量并增加整个集群的 I/O 利用率。这两个因素都会增加查询延迟。 基于 KEY 的分配 使 JOIN 更快 为了解决此问题并使 JOIN 更快,Amazon Redshift 提供了基于 KEY 的分配方式。通过基于 KEY 的分配,Amazon Redshift 将确保对于两个表中的给定列,不需要第 3 步(将数据移动到单个节点)。这是通过在将数据写入节点时应用算法来实现的。该算法确保“DISTKEY”列中具有相同值的行最终位于同一节点上。 考虑一个示例,其中 JOIN 列的名称是“ customer_id ”。 表 1 的 DISTKEY 必须是“ customer_id ” 表 2 的 DISTKEY 必须是“ customer_id ” 查询 1 在“ customer_id ”上连接表 1 和表 2 在这种情况下,查询 1 将比表 1 或表 2 使用基于 EVEN 的分布的情况执行得更快。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|慈溪一点通 ( 沪ICP备19015575号-9 )

GMT+8, 2025-8-18 02:00 , Processed in 0.054505 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表