为啥我的查询仍然在 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=123
和where 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 进行全表扫描?的主要内容,如果未能解决你的问题,请参考以下文章