Что такое гранулярный индекс в ClickHouse

«Что такое гранулярный индекс в ClickHouse» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Гранулярный индекс в ClickHouse — это структура данных, которая ускоряет поиск, работая не с отдельными строками, а с группами (гранулами).

Особенности:

  • Данные хранятся блоками (гранулами) по 8192 строк (по умолчанию)
  • Индекс содержит метаданные о гранулах (мин/макс значения, смещения)
  • Позволяет пропускать целые гранулы при фильтрации

Пример работы:

-- Создаем таблицу с индексом
CREATE TABLE logs (
    timestamp DateTime,
    message String,
    INDEX idx_timestamp timestamp TYPE minmax GRANULARITY 3
) ENGINE = MergeTree()
ORDER BY timestamp;

При запросе WHERE timestamp > now() - INTERVAL 1 DAY ClickHouse пропустит гранулы, где максимальное значение timestamp меньше нужной даты.