交错排序键
交错排序为排序键中的每个列或列的子集赋予相同的权重。如果多个查询使用不同的列作为筛选条件,则通常可以使用交错排序方式来提高这些查询的性能。当查询对辅助排序列使用限制性谓词时,与复合排序相比,交错排序可显著提高查询的性能。
重要
不要在具有单调递增属性的列(例如,身份列、日期或时间戳)上使用交错排序键。
您应将实施交错排序键获得的性能提升与增加的负载和 vacuum 次数进行权衡。
交错排序对于高选择性查询(在 WHERE 子句中对一个或多个排序键列进行筛选的查询,如 select
c_name from customer where c_region = 'ASIA'
)最为有效。交错排序的优势随着受限制排序列数量的增加而增大。
交错排序对于大型表更为有效。排序应用于每个切片。因此,当某张表大到足以使每个切片占用多个 1 MB 数据块时,交错排序最为有效。在这里,查询处理器可以使用限制性谓词跳过大部分数据块。要查看表使用的数据块数,请查询 STV_BLOCKLIST 系统视图。
对单一列进行排序时,如果该列的值拥有较长的共同前缀,则交错排序的性能要优于复合排序。如都以“http://www”打头的 URL。复合排序键使用前缀中有限数量的字符,因此会产生大量的重复键。交错排序为区域映射值使用了内部压缩方案,使它们能够更好地区分具有较长共同前缀的列值。
当将 Amazon Redshift 预调配的集群迁移到 Amazon Redshift Serverless 时,Redshift 将具有交错排序键和 DISTSTYLE KEY 的表转换为复合排序键。DISTSTYLE 不会变化。有关分配方式的更多信息,请参阅使用数据分配方式。
VACUUM REINDEX
在您向已包含数据的排序表中不断添加行的过程中,性能会逐渐下降。复合排序和交错排序都会出现这种性能下降,但交错表受到的影响更大。VACUUM 可恢复排序顺序,但对于交错表,该操作可能需要花费更长的时间,因为合并新的交错数据可能涉及到修改每一个数据块。
初次加载表时,Amazon Redshift 会分析值在排序键列中的分配,并利用该信息来优化排序键列的交错操作。随着表的增大,排序键列中值的分配可能会发生变化或偏斜,日期或时间戳列的变化或偏斜更加明显。如果偏斜过大,则性能会受到影响。要重新分析排序键并恢复性能,请运行包含 REINDEX 关键字的 VACUUM 命令。对于交错表,由于它必须对数据进行额外的分析,因此,VACUUM REINDEX 需要花费比标准 VACUUM 操作还要长的时间。要查看有关键分配偏斜和上次重建索引时间的信息,请查询 SVV_INTERLEAVED_COLUMNS 系统视图。
有关如何确定运行 VACUUM 的频度和运行 VACUUM REINDEX 的时机的更多信息,请参阅决定是否重建索引。