【发布时间】:2017-02-15 16:58:48
【问题描述】:
我正在查看我在 Redshift 中执行的一些查询的性能,并注意到我在文档中找不到的一些内容。
我创建了两个表,它们之间有一个连接键(子表中大约有 10K 行)。
对于父表,我们称它为 A,我有一个主键,我已声明它是表的 distkey 和排序键。我们称它为 id。
对于子表 B,我创建了一个外键字段 parent_id,它引用了 A.id。 parent_id 已被声明为表 B 的 distkey。表 B 也有一个主键,即我定义的 id。我在表 B 上为 (parent_id,id) 创建了一个交错排序键。
当我尝试解释连接两个表时,我总是会得到一个哈希连接。如果我用普通的复合排序键重新创建表 B,我总是会得到一个合并连接。
当我查看表格的统计数据时,我没有看到任何不符合规定的偏差。
我的问题是,Redshift 是否总是使用带有交错排序键的哈希连接,还是我做错了什么?
EDIT - 表 B 中交错排序键的顺序实际上是 (parent_id, id)。我上面写错了。我已经更新了上面的内容。
【问题讨论】:
-
我怀疑您的交错密钥的顺序导致了问题。试着把
parent_id放在第一位。 -
感谢您的回复。实际上,我首先使用 parent_id 声明了表 B——我只是没有在上面写。由于合并连接仍然没有发生,因此我进行了编辑以澄清。
-
嗯,那肯定是
INTERLEAVED的问题。我过去每次尝试时都会遇到问题(查看 Redshift 论坛),所以我一直远离它,除非我真的需要它。 -
我之前尝试过使用交错排序,它确实应该有所帮助,但性能比标准复合排序慢一个数量级。这个理论很好,但我认为目前还没有准备好迎接黄金时段。
标签: amazon-redshift