为什么Amazon Redshift UNLOAD性能对新数据更好?

时间:2017-06-26 12:43:21

标签: amazon-web-services amazon-redshift

我想知道为什么在通过列选择从大表(> 100亿行)中卸载时, NOT 排序键或排序键的一部分,对于新添加的速度来说非常快数据。 Redshift如何理解是时候在第二种情况下停止顺序扫描了?

查询执行的时间。 39分37.02秒:

UNLOAD ('SELECT * FROM production.some_table WHERE daytime BETWEEN 
\\'2017-01-15\\' AND \\'2017-01-16\\'') TO ...

VS

查询执行的时间。 23.01s:

UNLOAD ('SELECT * FROM production.some_table WHERE daytime BETWEEN 
\\'2017-06-24\\' AND \\'2017-06-25\\'') TO ... 

谢谢!

1 个答案:

答案 0 :(得分:4)

Amazon Redshift使用区域映射来标识存储在磁盘上每个1MB块中的最小值和最大值。每个块仅存储与单个列相关的数据(例如daytime)。

如果SORTKEY 设置为daytime,则数据未排序,任何特定日期都可能出现在许多不同的块中。如果使用SORTKEY,则特定日期将仅显示在最小数量的块中。

即使没有SORTKEY,您的第二个查询也可能执行得更快,因为您正在查询最近可能添加的数据,因此只需几个块就可以将存储在一起。历史数据可能会在许多区块中传播,因为VACUUM可能会根据正确的SORTKEY重新排序数据。事实上,如果你现在做了VACUUM,你可能会发现你的第二个查询变慢了。