2016-09-15 28 views
0

我有50億行的紅移表,它將在未來增長很多。當我運行一個簡單的查詢

select max(sort_key) from tbl

它需要30秒。
我只有一個排序鍵在表中。
我最近在桌子上運行真空和分析。
我擔心30秒的原因是,我在我的子查詢中多次使用max(sort_key)。
有什麼我失蹤?從tbl_50billion_rows選擇max(sort_key)需要太長的時間

輸出從TBL解釋選擇最大值(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) 



輸出通過SORTKEY DESC LIMIT 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

是否有多個具有相同值的行(sort_keys)? – kometen

+0

對於排序鍵的每個值,@ kometen可能爲1000。 –

+0

另一個查詢是「按sort_key desc limit 1選擇sort_key order」。它可能跑得不快。你可以添加「解析分析select max(sort_key)從tbl的輸出;」你的問題? – kometen

回答

1

解釋從TBL順序選擇sort_key查找值爲MAX()需要Amazon Redshift查看列中的每個值。它可能不夠聰明,認識到Sortkey的MAX最後是正確的。

您可以通過幫助查詢使用區域地圖來加快速度,區域地圖可識別存儲在每個塊中的值的範圍。

如果你知道最大SORTKEY高於特定值,包括在WHERE子句中,如:

SELECT MAX(sort_key) FROM tbl WHERE sort_key > 50000; 

這將極大地減少紅移需要從磁盤獲取的塊數。