2016-09-15 2 views
0

У меня есть таблица красного смещения с 5 миллиардами строк, которая в ближайшем будущем будет расти. Когда я запускаю простой запрос

select max(sort_key) from tbl

занимает 30 секунд.
У меня есть только один ключ сортировки в таблице.
В последнее время я столкнулся с проблемой вакуума и анализа.
Причина, по которой я беспокоюсь о 30 сек, я использую max (sort_key) несколько раз в моем подзапросе.
Есть ли что-нибудь, что мне не хватает?Выберите max (sort_key) из tbl_5billion_rows слишком долго.

Выход Объяснение выбрать максимум (sort_key) с TBL

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) 



Выход Объяснение выбора sort_key от порядка TBL от SortKey предела по убыванию 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

Альтернативный запрос: «select sort_key order by sort_key desc limit 1;». Он может работать не быстрее. Можете ли вы добавить вывод «объяснять анализ select max (sort_key) из tbl;» на ваш вопрос? – kometen

ответ

1

обнаружение для значения MAX() значения Amazon Redshift просматривают каждое значение в столбце. Вероятно, он недостаточно умен, чтобы понять, что MAX Sortkey находится прямо в конце.

Вы можете ускорить его, помогая запросу использовать Карты зон, которые определяют диапазон значений, хранящихся в каждом блоке.

Если вы знаете, что максимальная SortKey выше определенного значения, включают в себя, что в предложении WHERE, например:

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

Это позволит резко сократить количество блоков, которые Redshift необходимо извлечь из диска.

Смежные вопросы