我在Redshift中有一个事实表,其中包含大约13亿行DISTribution键c1和排序键c1,c2。
我需要将这个表与c1上的join子句连接起来(例如,来自表的第一个实例的c1 =来自表的第二个实例的c1)。
当我看到查询的查询计划时,Redshift似乎正在使用DS_DIST_NONE进行哈希联接。虽然期望DS_DIST_NONE,因为我在列c1上有dist键和排序键,但我希望Redshift执行Merge Join而不是Hash Join(同样是因为同样的原因)。
我认为这会减慢我的查询速度。
任何人都可以解释为什么Redshift可能正在进行Hash Join而不是Merge Join(即使我在加入列上同时拥有DIST Key和SORT键)并且Redshift正在为查询执行DS_DIST_NONE?
答案 0 :(得分:3)
事实证明,由于我们没有按照排序顺序在表中插入数据(由该表的Sort Key定义),而Redshift不会自动保持表的排序按排序键排序,所以没有办法Redshift在我们的桌子上执行Merge Join。在桌面上运行完全真空后,Redshift开始执行合并加入