---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
alternate:
  - https://ydb-platform--ydb.viewer.diplodoc.com/en/dev/min_max-skip-index.md
  - https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/min_max-skip-index.md
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/min_max-skip-index.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/dev/min_max-skip-index.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt

# min_max-индекс

min_max-индекс — [локальный индекс](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#local-index), который ускоряет сканирующие запросы с высокоселективным фильтром за счёт пропуска фрагментов. В отличие от глобальных [вторичных индексов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#secondary-index), он работает как фильтр чтения основной таблицы и уменьшает объём данных, которые нужно фактически прочитать.

Для каждого индексируемого фрагмента данных min_max-индекс хранит минимальное и максимальное значение одной колонки. Во время выполнения запроса YDB вычисляет предикат на этих двух значениях. Если из результатов вычисления следует, что предикат отфильтрует все кортежи фрагмента, фрагмент пропускается.

## Примеры {#examples}

Синтаксис создания: [CREATE TABLE](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/create_table/min_max_index.md), [ALTER TABLE ADD INDEX](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/alter_table/indexes.md#local-min-max).

Создание колоночной таблицы с min_max-индексом:

```yql
CREATE TABLE events (
    id Uint64,
    created_at Timestamp,
    level Int32,
    resource_id Utf8,
    PRIMARY KEY (id),
    INDEX idx_created_at LOCAL USING min_max
        ON (created_at),
    INDEX idx_level LOCAL USING min_max
        ON (level)
)
WITH (
    STORE = COLUMN
);
```

Добавление min_max-индекса к существующей колоночной таблице:

```yql
ALTER TABLE events
  ADD INDEX idx_resource_id LOCAL USING min_max
  ON (resource_id);
```

Запросы с диапазонными предикатами могут использовать индекс для пропуска неподходящих фрагментов:

```yql
SELECT id, resource_id
FROM events
WHERE created_at BETWEEN Timestamp("2024-01-01T00:00:00.000000Z")
                     AND Timestamp("2024-01-02T00:00:00.000000Z");
```

## Когда применять {#use}

min_max-индекс полезен, когда значения индексируемой колонки слабо меняются между соседними по первичному ключу строками таблицы: например, это временные метки, монотонно растущие идентификаторы или другие значения, коррелированные с первичным ключом.

Также min_max-индекс может быть полезен, когда предикат фильтра выбирает очень малую долю данных (порядка одной строки на миллион). Например, при запросах над таблицей логов сервиса, оставляющих только записи с уровнем `ERROR`: если сервис пишет одну ошибку на 1 000 000 записей, min_max-индекс, вероятно, существенно сократит объём чтения.

## Особенности и ограничения {#limitations}

<!-- source: ru/yql/reference/syntax/_includes/min_max_index_features.md -->
* Индекс всегда [локальный](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#local-index) (`LOCAL`); [глобального](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#secondary-index) варианта нет.
* В запросах не используется синтаксис `VIEW <index>` (в отличие, например, от [полнотекстовых индексов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/fulltext-indexes.md)).
* Фильтр применяется при чтении только к тем фрагментам данных, для которых при записи или [слиянии](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#compaction) уже вычислены и сохранены вместе с данными таблицы минимальное и максимальное значения индексируемой колонки; для остальных фрагментов пропуск по этому индексу не выполняется.
<!-- endsource: ru/yql/reference/syntax/_includes/min_max_index_features.md -->

{% note info "Ограничения" %}

<!-- source: ru/yql/reference/syntax/_includes/min_max_index_limitations.md -->
* Поддерживаются только для [колоночных таблиц](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#column-oriented-table).
* В `ON (...)` должна быть указана ровно одна колонка.
* `COVER (...)` и дополнительные колонки данных не поддерживаются.
* Специфичные параметры `WITH (...)` не поддерживаются.
* `ALTER INDEX` для min_max-индекса не поддерживается.
* Колонки типов `Json` и `JsonDocument` не поддерживаются.
<!-- endsource: ru/yql/reference/syntax/_includes/min_max_index_limitations.md -->

{% endnote %}

## Дополнительные материалы {#see-also}

* [Вторичные индексы](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/secondary-indexes.md)
* [Локальные индексы](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/query_execution/local_indexes.md)
* [Справочник YQL: CREATE TABLE](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/create_table/min_max_index.md)
* [Справочник YQL: SELECT](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/select/index.md)
* [Справочник YQL: ALTER TABLE](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/alter_table/indexes.md#local-min-max)
* [Быстрый старт](https://ydb-platform--ydb.viewer.diplodoc.com/ru/recipes/min_max-skip-index/min_max-skip-index-quickstart.md)
