我想知道为什么在通过列选择从大表(> 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 ...
谢谢!
答案 0 :(得分:4)
Amazon Redshift使用区域映射来标识存储在磁盘上每个1MB块中的最小值和最大值。每个块仅存储与单个列相关的数据(例如daytime
)。
如果SORTKEY
不设置为daytime
,则数据未排序,任何特定日期都可能出现在许多不同的块中。如果使用SORTKEY
,则特定日期将仅显示在最小数量的块中。
即使没有SORTKEY
,您的第二个查询也可能执行得更快,因为您正在查询最近可能添加的数据,因此只需几个块就可以将存储在一起。历史数据可能会在许多区块中传播,因为VACUUM
可能会根据正确的SORTKEY
重新排序数据。事实上,如果你现在做了VACUUM
,你可能会发现你的第二个查询变慢了。