Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

Эти настройки доступны в system.settings и автоматически генерируются на основе исходного кода.

optimize_trivial_approximate_count_query

Тип
Bool
По умолчанию
0

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

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

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

optimize_trivial_count_query

Тип
Bool
По умолчанию
1

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

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

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

См. также:

optimize_trivial_count_with_sparsity_filter

Возможность в статусе бета
Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.81Переведён в бета-статус и включён по умолчанию: результат `SELECT count() FROM t WHERE <pred>` берётся из сохраняемых счётчиков `num_defaults` / `num_rows` для каждого столбца, когда `<pred>` разделяет строки на значения по умолчанию и все остальные. Требуется настройка MergeTree `compute_exact_num_defaults_for_sparse_columns` (теперь также включена по умолчанию).
26.70Новый (экспериментальный) параметр, позволяющий получать результат `SELECT count() FROM t WHERE <pred>` из счётчиков `num_defaults` / `num_rows` для каждого столбца, записанных в `serialization.json`, когда `<pred>` точно разделяет строки на значения по умолчанию и все остальные.

Расширяет оптимизацию 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_group_by_limit_query

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.51Новая настройка, ограничивающая агрегацию не более чем `LIMIT` различными ключами для запросов `SELECT key_expr FROM t GROUP BY key_expr LIMIT n`.

Включает или отключает оптимизацию тривиального запроса SELECT key_expr FROM table GROUP BY key_expr LIMIT n (без агрегатных или оконных функций, а также arrayJoin в проекции, без секций HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/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 — Оптимизация включена.

optimize_trivial_insert_select

Тип
Bool
По умолчанию
0
История версий
ВерсияЗначение по умолчаниюКомментарий
24.70Эта оптимизация во многих случаях не имеет смысла.

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

optimize_trivial_view_pushdown_to_distributed

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.81Новая настройка для отправки полного внешнего запроса на сегменты для тривиальных представлений поверх таблиц Distributed.

Если включено, для представлений поверх таблиц Distributed, в списке SELECT которых указаны только ссылки на столбцы, * или выражения (без оконных функций и скалярных подзапросов), а также отсутствуют агрегация, группировка, сортировка и JOIN, полный внешний запрос отправляется на каждый сегмент. Это позволяет сегменту локально применять фильтры и выражения представления, уменьшая объём данных, передаваемых по сети.

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

  • 0 — Оптимизация отключена; представления поверх таблиц Distributed всегда выполняются на координаторе.
  • 1 — Оптимизация включена.
Navigation