Vij*_*sal 2 sql hash join amazon-web-services amazon-redshift
我在 Redshift 中有一个事实表,其中包含大约 13 亿行,其中包含 DISTribution 键 c1 和排序键 c1、c2。
我需要使用 c1 上的联接子句将该表与其自身联接起来(即来自表的第一个实例的 c1 = 来自表的第二个实例的 c1)。
当我看到查询的查询计划时,Redshift 似乎正在使用 DS_DIST_NONE 进行哈希联接。虽然 DS_DIST_NONE 是预期的,因为我在列 c1 上同时具有 dist 键和排序键,但我希望 Redshift 执行合并联接而不是散列联接(再次由于相同的原因)。
我相信这会减慢我的查询速度。
任何人都可以解释一下为什么 Redshift 可能会执行哈希连接而不是合并连接(即使我在连接列上同时具有 DIST 键和 SORT 键)并且 Redshift 对查询执行 DS_DIST_NONE ?
事实证明,由于我们没有按排序顺序(由该表的排序键定义)在表中插入数据,并且 Redshift 不会自动保持表的行按排序键排序,因此 Redshift 无法执行 Merge Join我们的桌子。在表上运行 Full Vacuum 后,Redshift 开始执行 Merge Join