> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# настройки сеанса optimize_trivial_*

> Настройки сеанса ClickHouse в автоматически сгенерированной группе optimize_trivial_*.

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Тип</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>По умолчанию</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Изменяется без перезапуска
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Экспериментальная возможность. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">Подробнее.</a></u>
        </div>;
};

Эти настройки доступны в [system.settings](/docs/ru/reference/system-tables/settings) и автоматически генерируются на основе [исходного кода](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="optimize_trivial_approximate_count_query">
  ## optimize\_trivial\_approximate\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Использовать приблизительное значение для оптимизации простого подсчета `count` в хранилищах, поддерживающих такую оценку, например EmbeddedRocksDB.

Возможные значения:

* 0 — Оптимизация отключена.
  * 1 — Оптимизация включена.

<div id="optimize_trivial_count_query">
  ## optimize\_trivial\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

Включает или отключает оптимизацию тривиального запроса `SELECT count() FROM table` с использованием метаданных MergeTree. Если требуется использовать безопасность на уровне строки, отключите этот параметр.

Возможные значения:

* 0 — Оптимизация отключена.
  * 1 — Оптимизация включена.

См. также:

* [optimize\_functions\_to\_subcolumns](/docs/ru/reference/settings/session-settings/optimize#optimize_functions_to_subcolumns)

<div id="optimize_trivial_count_with_sparsity_filter">
  ## optimize\_trivial\_count\_with\_sparsity\_filter
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "Новый (экспериментальный) параметр, позволяющий получать результат `SELECT count() FROM t WHERE <pred>` из счётчиков `num_defaults` \/ `num_rows` для каждого столбца, записанных в `serialization.json`, когда `<pred>` точно разделяет строки на значения по умолчанию и все остальные."}]}]} />

Расширяет оптимизацию [optimize\_trivial\_count\_query](/docs/ru/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query) на
запросы вида `SELECT count() FROM t WHERE col <op> const`, где `<op> const`
точно разделяет строки на значения по умолчанию и все остальные для `col`. В этом случае результат count
берётся из счётчиков `num_defaults` / `num_rows` для каждого столбца, которые MergeTree уже
хранит в `serialization.json`, без сканирования данных.

Распознаваемые шаблоны:

* `col = default(col)` / `col != default(col)` для `Int*` / `UInt*`, `String` /
  `FixedString`, `Date` / `DateTime` / `DateTime64`, `Decimal*`, `UUID`, `IPv4` / `IPv6`.
* `IS NULL` / `IS NOT NULL` для столбцов `Nullable`.
* `empty(col)` / `notEmpty(col)` для столбцов `String`.
* `col = true` / `col != true` для столбцов `Bool`.
* `col > 0`, `col >= 1`, `col < 1`, `col <= 0` для беззнаковых целочисленных столбцов.
* Просто `col` / `NOT col` для столбцов `Int*`, `UInt*`, `Bool` (проверка на истинность).

Шаблоны равенства не применяются к `Float*`, `Enum*`, `Nullable`, `LowCardinality`
или составным типам (`Tuple`, `Array`, `Map`, ...) — для них count вычисляется по
обычному пути сканирования.

Чтобы это работало, счётчик `num_defaults` для каждой части должен быть точным. Включите настройку таблицы MergeTree
`compute_exact_num_defaults_for_sparse_columns` в целевой таблице до
вставок и слияний. Части, записанные без неё, молча исключаются из rewrite, поэтому
одного включения `optimize_trivial_count_with_sparsity_filter` недостаточно.

Для шаблонов `IS NULL` / `IS NOT NULL` на столбцах `Nullable` у столбца также должна
быть запись `num_defaults` в `serialization.json`, что происходит только когда настройка таблицы MergeTree
`nullable_serialization_version` установлена в `allow_sparse` во время вставки /
слияния. При значении по умолчанию `basic` столбцы `Nullable` не получают записи для каждого столбца, поэтому
оптимизация молча не применяется.

Возможные значения:

* 0 — Оптимизация отключена.
  * 1 — Оптимизация включена.

См. также:

* [optimize\_trivial\_count\_query](/docs/ru/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query)

<div id="optimize_trivial_group_by_limit_query">
  ## optimize\_trivial\_group\_by\_limit\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "Новая настройка, ограничивающая агрегацию не более чем `LIMIT` различными ключами для запросов `SELECT key_expr FROM t GROUP BY key_expr LIMIT n`."}]}]} />

Включает или отключает оптимизацию тривиального запроса `SELECT key_expr FROM table GROUP BY key_expr LIMIT n` (без агрегатных функций в проекции, без секций `HAVING`/`ORDER BY`/`LIMIT BY`/window и без модификаторов `GROUP BY`) за счет установки `max_rows_to_group_by = n + offset` и `group_by_overflow_mode = 'any'`. Агрегация прекращается, как только будет получено `n + offset` различных ключей.

Оптимизация не применяется, если пользователь явно установил для `group_by_overflow_mode` значение, отличное от `any` (чтобы сохранить явно заданное поведение `throw`/`break`), а также если пользователь уже задал более строгое значение `max_rows_to_group_by` (в этом случае оптимизация ничего бы не изменила).

Возможные значения:

* 0 — Оптимизация отключена.
* 1 — Оптимизация включена.

<div id="optimize_trivial_insert_select">
  ## optimize\_trivial\_insert\_select
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "Эта оптимизация во многих случаях не имеет смысла."}]}]} />

Оптимизация тривиального запроса 'INSERT INTO table SELECT ... FROM TABLES'
