Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在红移中永远运行的简单查询_Sql_Amazon Web Services_Amazon Redshift - Fatal编程技术网

Sql 在红移中永远运行的简单查询

Sql 在红移中永远运行的简单查询,sql,amazon-web-services,amazon-redshift,Sql,Amazon Web Services,Amazon Redshift,我正在红移中运行一个简单的查询,其中源表有2600万条记录,而另一个表有120k条记录。一个问题是,这两个表之间没有直接的关系,所以我使用了另一个外键,这在这两个表中都很常见,用于进行连接。当我给出一个限制时,查询将在几秒钟内完成,但是当无限制运行时,它将永远运行 `select a.person_name, b.city from persons a left outer join address b on a.zip_code= b.zip_code` `QUERY PLAN XN

我正在红移中运行一个简单的查询,其中源表有2600万条记录,而另一个表有120k条记录。一个问题是,这两个表之间没有直接的关系,所以我使用了另一个外键,这在这两个表中都很常见,用于进行连接。当我给出一个限制时,查询将在几秒钟内完成,但是当无限制运行时,它将永远运行

 `select a.person_name, b.city from persons a  left outer join  address b on a.zip_code= b.zip_code`

`QUERY PLAN
XN Hash Left Join DS_BCAST_INNER  (cost=1559.11..39246081357.77 rows=224197624453 width=15)
           Hash Cond: ("outer".zip_code = "inner".zip_code)
  ->  XN Seq Scan on persons a  (cost=0.00..269134.10 rows=26913410 width=16)
  ->  XN Hash  (cost=1247.29..1247.29 rows=124729 width=15)
        ->  XN Seq Scan on address b  (cost=0.00..1247.29 rows=124729 width=15)`


Any help would be appreciated.

您可能有一堆在两个表中都有重复值的邮政编码。您可以通过
联接
计算中间表的大小,方法是:

select sum(p.cnt * a.cnt)
from (select zip_code, count(*) as cnt
      from persons
      group by zip_code
     ) p join
     (select zip_code, count(*) as cnt
      from address
      group by zip_code
     ) a
     on p.zip_code = a.zip_code;
您可能会发现,这实际上生成了数十亿行——如果不是更多的话。这就是为什么查询要花这么长时间

您需要适当的
join
条件来解决问题