GROUP BY и Memory limit exceeded

GROUP BY и Memory limit exceeded

Способ 1

Просто увеличить max_memory_usage

Способ 2

Включить агрегацию во внешней памяти:

max_bytes_before_external_group_by

distributed_aggregation_memory_efficient

Способ 3

Двухпроходная агрегация:

– в подзапросе вычисляем множество ключей,
 которые войдут в результат;

– только для них считаем все агрегатные функции.

Способ 3, лучше

Двухпроходная агрегация:

– в подзапросе вычисляем множество ключей,
 которые войдут в результат;

– только для них считаем все агрегатные функции.

Чтобы сэкономить память, будем вычислять
множество хэшей вместо множества строк.

Способ 4

Магические опции:

max_rows_to_group_by,
group_by_overflow_mode = 'any'

Способ 5

Сэмплирование

Способ 6

Выгрузить данные по части ключей.

Сделать несколько проходов.

Способ 7

Посчитать данные для ключей,
которые встречаются часто.

Способ 7, лучше

Посчитать данные для ключей,
которые встречаются часто.

Вывод

Если запрос не укладывается в ограничения,
вы всё-равно можете его выполнить.

?