Понятие индекса в ClickHouse
В ClickHouse есть понятие индекса, но оно отличается от традиционных индексов в реляционных базах данных (таких как PostgreSQL или MySQL). Индексы в ClickHouse используются для ускорения выборок, но они интегрированы в саму архитектуру таблиц и движков, таких как MergeTree, а не создаются отдельно.
Типы индексов в ClickHouse
1. Primary Key (Первичный ключ)
- В ClickHouse это не строгий первичный ключ, как в традиционных СУБД. Он используется как часть структуры таблицы и определяет порядок сортировки данных.
- Primary Key задаётся через параметр
ORDER BY
при создании таблицы. - Он играет ключевую роль в ускорении поиска и запросов.
Пример:
1 2 3 4 5 6 7 8 |
CREATE TABLE example_table ( id UInt64, name String, created_at DateTime ) ENGINE = MergeTree() ORDER BY id; |
ORDER BY id
указывает, что данные будут отсортированы поid
. Это помогает ClickHouse эффективно фильтровать и читать данные.
2. Index Granularity (Гранулярность индекса)
- Параметр
index_granularity
определяет, как часто создаются блоки индексации внутри данных. - По умолчанию используется значение
8192
(каждая 8192-я строка записывается в индекс). - Это влияет на производительность запросов и использование дискового пространства.
Пример:
1 2 3 4 5 6 7 8 9 |
CREATE TABLE example_table ( id UInt64, name String, created_at DateTime ) ENGINE = MergeTree() ORDER BY id SETTINGS index_granularity = 8192; |
3. Skip Indexes (Пропускающие индексы)
- Эти индексы используются для сокращения количества проверяемых строк в запросах.
- Подходят для фильтрации, особенно если у вас есть часто запрашиваемые поля.
- Добавляются через ключевое слово
INDEX
в структуре таблицы.
Пример:
1 2 3 4 5 6 7 8 9 |
CREATE TABLE example_table ( id UInt64, name String, created_at DateTime, INDEX idx_name name TYPE set(0) GRANULARITY 4 ) ENGINE = MergeTree() ORDER BY id; |
INDEX idx_name name TYPE set(0) GRANULARITY 4
:name
— поле, по которому создаётся индекс.TYPE set(0)
— тип индекса, оптимизированный для точного поиска.GRANULARITY 4
— интервал гранулярности индекса.
Как индексы влияют на структуру таблицы?
Индексы в ClickHouse тесно связаны с движком таблицы и её настройками:
- Движок таблицы (например, MergeTree):
- Для таблиц с движком MergeTree индексация определяется сортировкой (
ORDER BY
), партициями (PARTITION BY
) и гранулярностью (index_granularity
).
- Для таблиц с движком MergeTree индексация определяется сортировкой (
- Синтаксис создания индексов:
- Индексы указываются непосредственно при создании таблицы, например, через
INDEX
.
- Индексы указываются непосредственно при создании таблицы, например, через
Пример комплексной таблицы с индексами
1 2 3 4 5 6 7 8 9 10 11 12 13 |
CREATE TABLE example_table ( id UInt64, name String, age UInt8, created_at DateTime, INDEX idx_name name TYPE set(0) GRANULARITY 2, -- Пропускающий индекс INDEX idx_age age TYPE minmax GRANULARITY 1 -- Пропускающий индекс для диапазона ) ENGINE = MergeTree() PARTITION BY toYYYYMM(created_at) -- Партиционирование по месяцам ORDER BY (created_at, id) -- Первичный ключ SETTINGS index_granularity = 8192; |
Объяснение:
- Пропускающие индексы:
idx_name
— точное соответствие значенийname
.idx_age
— используется для фильтрации по диапазону значенийage
.
- ORDER BY:
- Данные сортируются по
created_at
иid
, что ускоряет запросы с фильтрацией и сортировкой по этим полям.
- Данные сортируются по
- PARTITION BY:
- Разделение данных по месяцам из поля
created_at
, что улучшает работу с большими объёмами данных.
- Разделение данных по месяцам из поля
- Настройки индекса:
- Гранулярность (размер блока) указана как
8192
(по умолчанию).
- Гранулярность (размер блока) указана как
Итог
- В ClickHouse индексы — это часть архитектуры таблицы, зависящая от движка (например, MergeTree).
- Основные индексы:
- Primary Key (указывается через
ORDER BY
). - Skip Indexes (добавляются через
INDEX
). - Партиционирование (упрощает доступ к данным по крупным сегментам).
- Primary Key (указывается через
- Индексы настраиваются при создании таблицы и напрямую влияют на производительность запросов.
Recommended Posts
clickhouse-go лучшие практики
16.04.2024