Перейти к содержимому
3 / 10

ClickHouse MergeTree: как выбрать ORDER BY, ключ партиционирования и что такое гранулы?

В MergeTree главное — ключ сортировки ORDER BY: данные физически упорядочены по нему, и по нему же строится разреженный первичный индекс, который хранит по одной засечке на гранулу (по умолчанию 8192 строки). Запрос отсекает целые гранулы, поэтому колонки в ORDER BY располагают от низкой кардинальности к высокой и по убыванию частоты использования в фильтрах; три-пять колонок — типичный разумный размер. Ключ партиционирования — другое: он режет таблицу на части для отсечения по времени и для дешёвого удаления (DROP PARTITION), и слишком мелкая гранулярность здесь вредна — сотни тысяч мелких частей перегружают слияние и планирование. Практика: PARTITION BY toYYYYMM(date) для большинства таблиц, отсутствие партиционирования для маленьких. Вставка — только батчами: каждая вставка создаёт часть, а слияние в фоне переписывает их; при построчной вставке система не успевает сливать и упирается в лимит частей.

ClickHouse MergeTree: как выбрать ORDER BY, ключ партиционирования и что такое гранулы? | JScriptiser