Amazon Redshift Equality过滤器性能和排序键

时间:2013-10-17 12:06:05

标签: amazon-web-services amazon-redshift paraccel

Redshift是否有效(即二进制搜索)找到在A列上排序的表的块,用于条件A =?

的查询

作为一个例子,让一个表T有~500m行,~50个字段,在字段A上分布和排序。字段A具有高基数 - 所以有~4.5米不同的A值,具有完全相同的数字T中的行数:每个值约100行 假设具有单个XL节点的红移群集 字段A未压缩。所有其他字段都有一些表单压缩,如ANALYZE COMPRESSION所示。与未压缩的表相比,给出了1:20的比率。

给出一个简单的查询:

select avg(B),avg(C) from
(select B,C from T where A = <val>)

在VACUUM和ANALYZE之后,给出了以下解释计划:

XN Aggregate (cost=1.73..1.73 rows=1 width=8)
-> XN Seq Scan on T (cost=0.00..1.23 rows=99 width=8)
Filter: (A = <val>::numeric)

此查询需要39秒才能完成 主要问题是:这是红移的预期行为吗?

根据Choosing the best sortkey的文件:
&#34;如果对一列执行频繁范围过滤或相等过滤,请将该列指定为排序键。 Redshift可以跳过读取该列的整个数据块,因为它会跟踪存储在每个块上的最小和最大列值,并且可以跳过不适用于谓词范围的块。& #34;

Choosing sort keys中:
&#34;依赖于排序数据的另一个优化是范围限制谓词的有效处理。 Amazon Redshift将列数据存储在1 MB磁盘块中。 每个块的最小值和最大值都存储为元数据的一部分。如果范围受限列是排序键,则查询处理器能够使用最小值和最大值在表扫描期间快速跳过大量块。例如,如果表存储按日期排序的五年数据,并且查询指定一个月的日期范围,则可以从扫描中消除多达98%的磁盘块。如果数据未排序,则必须扫描更多磁盘块(可能全部磁盘块)。有关这些优化的更多信息,请参阅选择分发键。&#34;

次要问题:
在排序键上进行上述跳过扫描的复杂性是多少?它是线性的(O(n))还是二元搜索的一些变体(O(logn))?
如果某个键已排序 - 正在跳过唯一可用的优化吗? 这会&#34;跳过&#34;优化看起来像解释计划? 以上是解释此查询可能的最佳方法吗? 在这种情况下,可以预期红移最快的结果是什么? vanilla ParAccel在这个用例中有不同的行为吗?

1 个答案:

答案 0 :(得分:2)

亚马逊论坛上回答了这个问题:https://forums.aws.amazon.com/thread.jspa?threadID=137610