我们有一个 2 节点 Redshift 集群,其中有一个包含大约 100M 记录的表。我们将时间戳列标记为排序键 - 因为查询始终受到时间限制。但是,我们的用例要求结果必须按降序排序(在排序键上)。
经过一些基准测试后,我们注意到平均时间约为 10 秒。然而,当取消反向排序后,平均时间降至 1 秒以下。
是否可以将排序键的顺序反转为降序?官方文档似乎没有表明这是可能的。不过,我在创建新表时尝试将其放入:
sortkey(start_time DESC)
Run Code Online (Sandbox Code Playgroud)
没有错误,但似乎没有任何效果。
编辑:添加了查询的 EXPLAIN 语句的结果。
order_by ASC 的查询
explain select * from kcdr_sr_desc where user_id=396747 and start_time > '2016-01-01' and start_time < '2016-07-01' order by start_time limit 20;
Run Code Online (Sandbox Code Playgroud)
结果:
XN Limit (cost=0.00..10.86 rows=20 width=300)
-> XN Merge (cost=0.00..709235.56 rows=1306585 width=300)
Merge Key: start_time
-> XN Network (cost=0.00..709235.56 rows=1306585 width=300)
Send to leader
-> XN Seq Scan on kcdr_sr_desc (cost=0.00..709235.56 rows=1306585 width=300)
Filter: ((user_id = …Run Code Online (Sandbox Code Playgroud)