Zone maps是在内存中的block metadata
,存储了每个block(每个block是1MB)的最大和最小值,当执行查询时,redshift
先访问zone map
,如果where
条件里的判断不在zone map
范围里,就对该block
不进行查询,这样可以减少不必要的IO
例如下面是一个zone map
示例:
Block | Low Value | High Value |
---|---|---|
1 | 413 | 911 |
2 | 454 | 513 |
3 | 253 | 862 |
4 | 326 | 644 |
5 | 36 | 850 |
如果查询这个表中小于255的值,从zone maps
里看到只需要查询block 3
和block5
上面的zone maps
的最小最小值可能会有重叠的情况,所以这就引出了Sort key
当创建表时,可以指定一个或多个列当作sort key, 当数据加载到表中时,会以顺序存储。在执行查询时,query planner会使用这些信息来加速查询。
Redshift每个磁盘的块存储是1MB,每个block上保存着最大值和最小值的元数据。如果使用range查询,则根据这些最大值和最小值,能够快速跳过不需要查询的数据块。
对于sortkey,每个block的zone map不会重叠,就像这样:
Block | Low Value | High Value |
---|---|---|
1 | 99 | 141 |
2 | 141 | 336 |
3 | 336 | 376 |
4 | 376 | 419 |
5 | 419 | 435 |
例如,下面的查询,在设置sort key
前,需要扫描三个block,而在设置sort key
后,只需要扫描一个block: