Zone maps和Sort key

Zone maps

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 3block5

上面的zone maps的最小最小值可能会有重叠的情况,所以这就引出了Sort key

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:

image-20221030092651867

Compound sort key与Interleaved sort key