我有50亿行的红移表,它将在不久的将来大量增长。当我运行一个简单的查询时(
select max(sort_key) from tbl
它需要30秒。
我桌上只有一把钥匙。
我最近在桌子上运行真空和分析。我担心30秒的原因是,我使用max(sort_key)多个在我的子查询中的时间。
我有什么遗失的吗?
输出从tbl解释选择max(sort_key)
XN Aggregate (cost=55516326.40..55516326.40 rows=1 width=4)
-> XN Seq Scan on tbl (cost=0.00..44413061.12 rows=4441306112 width=4)
输出按排序键desc限制解释从tbl顺序中选择sort_key 1
XN Limit (cost=1000756095433.11..1000756095433.11 rows=1 width=4)
-> XN Merge (cost=1000756095433.11..1000767198698.39 rows=4441306112 width=4)
Merge Key: sort_key
-> XN Network (cost=1000756095433.11..1000767198698.39 rows=4441306112 width=4)
Send to leader
-> XN Sort (cost=1000756095433.11..1000767198698.39 rows=4441306112 width=4)
Sort Key: sort_key
-> XN Seq Scan on tbl (cost=0.00..44413061.12 rows=4441306112 width=4)
答案 0 :(得分:1)
查找值的MAX()
需要Amazon Redshift查看列中的每个值。可能没有足够的智慧认识到Sortkey的MAX
在最后是正确的。
您可以通过帮助查询使用区域地图加快速度,区域地图可识别每个区块中存储的值范围。
如果您知道最大排序键高于特定值,请在WHERE子句中包含该值,例如:
SELECT MAX(sort_key) FROM tbl WHERE sort_key > 50000;
这将大大减少Redshift需要从磁盘检索的块数。