为什么Amazon Redshift UNLOAD性能对于新鲜数据要好得多?

Bor*_*rov 1 amazon-web-services amazon-redshift

我想知道为什么当按列而不是排序键或排序键的一部分进行选择时,从一个大表(> 1000亿行)中卸载对于新添加的数据而言极大地快。Redshift如何理解是时候在第二种情况下停止顺序扫描了?

查询花费在执行上的时间。39m 37.02s:

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

查询花费在执行上的时间。23.01秒:

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

谢谢!

Joh*_*ein 5

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

如果SORTKEY没有设置daytime,然后将数据未排序和任何特定的日期可能会出现在许多不同的块。如果SORTKEY使用,则特定日期将仅以最少的块数出现。

你的第二个查询可能执行速度更快,即使没有SORTKEY,因为您要查询的是可能是最近添加,因此所有存储的数据一起在短短的几个街区。历史数据可能散布在许多块中,因为VACUUM可能会根据正确的数据对数据进行重新排序SORTKEY。实际上,如果您VACUUM现在进行了一次操作,则可能会发现第二个查询变慢。