Join AWS红移:为什么删除运算符使用哈希连接而不是合并连接

Join AWS红移:为什么删除运算符使用哈希连接而不是合并连接,join,amazon-web-services,amazon-redshift,Join,Amazon Web Services,Amazon Redshift,我试图理解为什么AWS红移会在查询1和查询2之间创建不同的计划 查询1=>是一个select查询,涉及“id”列上的内部联接,这是两个表的分布和排序键 查询2=>是一个使用相同表和“id”列的删除查询 问题是对于查询1,红移执行合并联接,但是对于查询2,红移执行哈希联接。我查看了红移文档,但找不到发生这种情况的任何原因 有人能解释这一点吗?或者这是预期的行为 我读到散列连接比合并连接更昂贵。那么,是否有优化更新查询的最佳实践呢 以下是查询-> query 1=> explain sele

我试图理解为什么AWS红移会在查询1和查询2之间创建不同的计划

查询1=>是一个select查询,涉及“id”列上的内部联接,这是两个表的分布和排序键

查询2=>是一个使用相同表和“id”列的删除查询

问题是对于查询1,红移执行合并联接,但是对于查询2,红移执行哈希联接。我查看了红移文档,但找不到发生这种情况的任何原因

  • 有人能解释这一点吗?或者这是预期的行为

  • 我读到散列连接比合并连接更昂贵。那么,是否有优化
    更新
    查询的最佳实践呢

  • 以下是查询->

    query 1=>  explain select staging.id  from staging inner join request on  staging.id = bid_request.id;
                                          QUERY PLAN                                    
    ----------------------------------------------------------------
    XN Merge Join DS_DIST_NONE  (cost=0.00..941165.11 rows=1 width=400)
    Merge Cond: (("outer".id)::text = ("inner".id)::text)
    ->  XN Seq Scan on request  (cost=0.00..752932.08 rows=75293208 width=44)
    ->  XN Seq Scan on staging  (cost=0.00..0.00 rows=1 width=400)
    
    
    query 2=> explain delete from staging using request where  staging.id = request.id;
                                         QUERY PLAN                                       
    ---------------------------------------------------------------------------------------
    XN Hash Join DS_DIST_NONE  (cost=941165.10..941165.87 rows=1 width=6)
    Hash Cond: (("outer".id)::text = ("inner".id)::text)
    ->  XN Seq Scan on staging  (cost=0.00..0.00 rows=1 width=406)
    ->  XN Hash  (cost=752932.08..752932.08 rows=75293208 width=44)
         ->  XN Seq Scan on request  (cost=0.00..752932.08 rows=75293208 width=44)