IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Понятие индекса в ClickHouse

В ClickHouse есть понятие индекса, но оно отличается от традиционных индексов в реляционных базах данных (таких как PostgreSQL или MySQL). Индексы в ClickHouse используются для ускорения выборок, но они интегрированы в саму архитектуру таблиц и движков, таких как MergeTree, а не создаются отдельно.


Типы индексов в ClickHouse

1. Primary Key (Первичный ключ)

  • В ClickHouse это не строгий первичный ключ, как в традиционных СУБД. Он используется как часть структуры таблицы и определяет порядок сортировки данных.
  • Primary Key задаётся через параметр ORDER BY при создании таблицы.
  • Он играет ключевую роль в ускорении поиска и запросов.

Пример:

  • ORDER BY id указывает, что данные будут отсортированы по id. Это помогает ClickHouse эффективно фильтровать и читать данные.

2. Index Granularity (Гранулярность индекса)

  • Параметр index_granularity определяет, как часто создаются блоки индексации внутри данных.
  • По умолчанию используется значение 8192 (каждая 8192-я строка записывается в индекс).
  • Это влияет на производительность запросов и использование дискового пространства.

Пример:

3. Skip Indexes (Пропускающие индексы)

  • Эти индексы используются для сокращения количества проверяемых строк в запросах.
  • Подходят для фильтрации, особенно если у вас есть часто запрашиваемые поля.
  • Добавляются через ключевое слово INDEX в структуре таблицы.

Пример:

  • INDEX idx_name name TYPE set(0) GRANULARITY 4:
    • name — поле, по которому создаётся индекс.
    • TYPE set(0) — тип индекса, оптимизированный для точного поиска.
    • GRANULARITY 4 — интервал гранулярности индекса.

Как индексы влияют на структуру таблицы?

Индексы в ClickHouse тесно связаны с движком таблицы и её настройками:

  1. Движок таблицы (например, MergeTree):
    • Для таблиц с движком MergeTree индексация определяется сортировкой (ORDER BY), партициями (PARTITION BY) и гранулярностью (index_granularity).
  2. Синтаксис создания индексов:
    • Индексы указываются непосредственно при создании таблицы, например, через INDEX.

Пример комплексной таблицы с индексами

Объяснение:

  1. Пропускающие индексы:
    • idx_name — точное соответствие значений name.
    • idx_age — используется для фильтрации по диапазону значений age.
  2. ORDER BY:
    • Данные сортируются по created_at и id, что ускоряет запросы с фильтрацией и сортировкой по этим полям.
  3. PARTITION BY:
    • Разделение данных по месяцам из поля created_at, что улучшает работу с большими объёмами данных.
  4. Настройки индекса:
    • Гранулярность (размер блока) указана как 8192 (по умолчанию).

Итог

  • В ClickHouse индексы — это часть архитектуры таблицы, зависящая от движка (например, MergeTree).
  • Основные индексы:
    1. Primary Key (указывается через ORDER BY).
    2. Skip Indexes (добавляются через INDEX).
    3. Партиционирование (упрощает доступ к данным по крупным сегментам).
  • Индексы настраиваются при создании таблицы и напрямую влияют на производительность запросов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *