为啥我的查询仍然在 Redshift 中使用 sortkey 进行全表扫描?

Posted

技术标签:

【中文标题】为啥我的查询仍然在 Redshift 中使用 sortkey 进行全表扫描?【英文标题】:Why does my query still do a full table scan with sortkey in Redshift?为什么我的查询仍然在 Redshift 中使用 sortkey 进行全表扫描? 【发布时间】:2018-03-23 21:55:08 【问题描述】:

假设我们有一个表 table1,字段 1 为 INT ENCODE ZSTD,我们在字段 1 上添加了交错排序键。

但是当我查询select * from table1 where field1=123; 时,我仍然看到对整个表的顺序扫描,我认为这应该是对表的子扫描。

我对排序键有什么误解吗?

【问题讨论】:

【参考方案1】:

1) 根据您的说法,您不需要交错排序键,因为您只有一列感兴趣。当您希望多列同样重要时,您需要交错排序键,因为您想要运行where col1=123where col2=123 类型的查询。这为大型表提供了好处。

2) 压缩排序键列被认为是一种不好的做法。 Proof from Amazon:the first column in a compound sort key should not be encoded(一栏键相同)。整篇文章其实很有用,看完不后悔

3) 配置排序键并填充数据后,最好运行 Vacuum 并分析命令,以确保根据排序键对行进行排序并更新表统计信息。

【讨论】:

那里有更多的字段。只是有点懒得把它们都放在这里。 (我们有超过 100 列) 我认为我不需要复合排序键,因为执行查询的模式并不总是相同。并且之前也运行过真空和分析。 亚历克斯很聪明。听亚历克斯。 :) 或者阅读我们的“高级表格设计手册”以获得更详细的解释。 aws.amazon.com/blogs/big-data/…

以上是关于为啥我的查询仍然在 Redshift 中使用 sortkey 进行全表扫描?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Redshift Query 中禁用使用缓存结果?

Redshift COPY 命令中的时间戳格式无效

如何在redshift中查询kms加密数据

在我的情况下,为啥 rds 的执行速度比 redshift 快?

无法从 Redshift 中删除用户

使用 Python 和 Airflow 在电子邮件中发送 Redshift 查询结果