Проекции, материализованные представления и skip-индексы в ClickHouse: что выбрать?
Три механизма решают одну задачу — ускорить запрос, который не ложится на основной ключ сортировки, — но по-разному. Проекция — это скрытая копия части данных с другим ORDER BY или предагрегатом внутри той же таблицы; она поддерживается автоматически при вставке, и оптимизатор сам решает, использовать её или основную таблицу. Материализованное представление — это триггер на вставку, который пишет преобразованные данные в отдельную таблицу; оно мощнее (можно менять схему, соединять с словарями, агрегировать через AggregatingMergeTree), но обрабатывает только новые вставки, а исторические данные нужно заполнять вручную. Skip-индексы (minmax, set, bloom_filter, tokenbf_v1) не хранят копию, а позволяют пропускать гранулы по колонкам вне ключа сортировки — они дёшевы, но помогают лишь при хорошей локальности данных. Практика: сначала правильный ORDER BY, затем проекции, затем материализованные представления, skip-индексы — точечно.