【发布时间】:2018-03-23 21:55:08
【问题描述】:
假设我们有一个表 table1,字段 1 为 INT ENCODE ZSTD,我们在字段 1 上添加了交错排序键。
但是当我查询select * from table1 where field1=123; 时,我仍然看到对整个表的顺序扫描,我认为这应该是对表的子扫描。
我对排序键有什么误解吗?
【问题讨论】:
标签: amazon-redshift
假设我们有一个表 table1,字段 1 为 INT ENCODE ZSTD,我们在字段 1 上添加了交错排序键。
但是当我查询select * from table1 where field1=123; 时,我仍然看到对整个表的顺序扫描,我认为这应该是对表的子扫描。
我对排序键有什么误解吗?
【问题讨论】:
标签: amazon-redshift
1) 根据您的说法,您不需要交错排序键,因为您只有一列感兴趣。当您希望多列同样重要时,您需要交错排序键,因为您想要运行where col1=123 和where col2=123 类型的查询。这为大型表提供了好处。
2) 压缩排序键列被认为是一种不好的做法。 Proof from Amazon:the first column in a compound sort key should not be encoded(一栏键相同)。整篇文章其实很有用,看完不后悔
3) 配置排序键并填充数据后,最好运行 Vacuum 并分析命令,以确保根据排序键对行进行排序并更新表统计信息。
【讨论】: