Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Настройки сеанса optimize_*

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

optimize_aggregators_of_group_by_keys

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

Исключает агрегаторы min/max/any/anyLast для ключей GROUP BY в разделе SELECT

optimize_append_index

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

Используйте ограничения для добавления условия индекса. Значение по умолчанию — false.

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

  • true, false

optimize_arithmetic_operations_in_aggregate_functions

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

Вынести арифметические операции из агрегатных функций

optimize_const_name_size

Тип
Int64
По умолчанию
256
История версий
ВерсияЗначение по умолчаниюКомментарий
25.11256Заменять большими константами на скалярные значения и использовать хеш в качестве имени (размер оценивается по длине имени)

Заменять большие константы на скалярные значения и использовать хеш в качестве имени (размер оценивается по длине имени).

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

  • положительное целое число — максимальная длина имени,
  • 0 — всегда,
  • отрицательное целое число — никогда.

optimize_count_from_files

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

Включает или отключает оптимизацию подсчета числа строк в файлах различных входных форматов. Применяется к табличным функциям/движкам file/s3/url/hdfs/azureBlobStorage.

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

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

optimize_dictget_tuple_element

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.51Заменяет tupleElement(dictGet(..., tuple_of_attrs, ...), N) на вызов dictGet с одним атрибутом.

Заменяет tupleElement(dictGet('dict', ('a', 'b', 'c'), key), 2) на dictGet('dict', 'b', key), чтобы не извлекать лишние атрибуты словаря. Поддерживает позиционный (.1, .2, …) и именованный (.b) доступ, а также применяется к dictGetOrDefault, если аргумент значения по умолчанию — константный кортеж или tuple(...) из констант.

optimize_distinct_in_order

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

Включает оптимизацию DISTINCT, если некоторые столбцы в DISTINCT являются префиксом сортировки. Например, префиксом ключа сортировки в MergeTree или оператора ORDER BY.

optimize_distributed_group_by_sharding_key

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

Оптимизирует запросы GROUP BY sharding_key, позволяя избежать затратной агрегации на инициирующем сервере (что уменьшает использование памяти для запроса на инициирующем сервере).

Поддерживаются следующие типы запросов (и любые их комбинации):

  • SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist
  • SELECT ... FROM dist GROUP BY sharding_key[, ...]
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x

Следующие типы запросов не поддерживаются (поддержка некоторых из них может быть добавлена позже):

  • SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS
  • SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP
  • SELECT ... GROUP BY sharding_key[, ...] WITH CUBE
  • SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1

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

  • 0 — Отключено.
  • 1 — Включено.

См. также:

optimize_dry_run_check_part

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.21Новая настройка

При включении OPTIMIZE ... DRY RUN проверяет получившуюся слитую часть с помощью checkDataPart. Если проверка не проходит, генерируется исключение.

optimize_empty_string_comparisons

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
25.101Новая настройка.

Преобразует выражения вида col = '' или '' = col в empty(col), а col != '' или '' != col — в notEmpty(col) только в случаях, когда col имеет тип String или FixedString.

optimize_extract_common_expressions

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
25.11Оптимизация выражений WHERE, PREWHERE, ON, HAVING и QUALIFY за счет вынесения общих выражений из дизъюнкций конъюнкций.
24.120Добавлена настройка для оптимизации выражений WHERE, PREWHERE, ON, HAVING и QUALIFY за счет вынесения общих выражений из дизъюнкций конъюнкций.

Разрешает выносить общие выражения из дизъюнкций в выражениях WHERE, PREWHERE, ON, HAVING и QUALIFY. Логическое выражение вида (A AND B) OR (A AND C) можно переписать как A AND (B OR C), что может помочь использовать:

  • индексы в простых выражениях фильтрации
  • оптимизацию преобразования CROSS JOIN в INNER JOIN

optimize_functions_to_subcolumns

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
24.81Настройка включена по умолчанию

Включает или отключает оптимизацию, при которой некоторые функции преобразуются в чтение подстолбцов. Это уменьшает объем считываемых данных.

Можно преобразовать следующие функции:

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

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

optimize_inverse_dictionary_lookup

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
25.121Новая настройка

Позволяет избежать повторных обратных обращений к словарю за счёт более быстрого поиска в предварительно вычисленном наборе возможных значений ключей.

optimize_multiif_to_if

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

Заменяет 'multiIf' с одним условием на 'if'.

optimize_normalize_count_variants

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
21.31По умолчанию переписывает агрегатные функции, семантически эквивалентные count(), в count()

Переписывает агрегатные функции, семантически эквивалентные count(), в count().

optimize_on_insert

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

Включает или отключает преобразование данных перед вставкой, как если бы для этого блока уже было выполнено слияние (в соответствии с движком таблицы).

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

  • 0 — Отключено.
  • 1 — Включено.

Пример

Разница между включенным и отключенным режимами:

Запрос:

SET optimize_on_insert = 1;

CREATE TABLE test1 (`FirstTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY FirstTable;

INSERT INTO test1 SELECT number % 2 FROM numbers(5);

SELECT * FROM test1;

SET optimize_on_insert = 0;

CREATE TABLE test2 (`SecondTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY SecondTable;

INSERT INTO test2 SELECT number % 2 FROM numbers(5);

SELECT * FROM test2;

Результат:

┌─FirstTable─┐
│          0 │
│          1 │
└────────────┘

┌─SecondTable─┐
│           0 │
│           0 │
│           0 │
│           1 │
│           1 │
└─────────────┘

Обратите внимание, что эта настройка влияет на поведение Materialized view.

optimize_prewhere_after_pushdown

Тип
Bool
По умолчанию
0
История версий
ВерсияЗначение по умолчаниюКомментарий
26.60Новая настройка, включающая второй проход вынесения в PREWHERE, чтобы объединять с существующей цепочкой PREWHERE фильтры, добавленные выше шага чтения MergeTree более поздними оптимизациями (pushdown предикатов через JOIN, переписывание projection).

Выполняет второй проход вынесения в PREWHERE после того, как более поздние оптимизации плана запроса могли добавить дополнительные фильтры выше шага чтения MergeTree (например, pushdown предикатов через JOIN, переписывание projection). Если PREWHERE уже есть, новый фильтр объединяется с ним через AND, а не остаётся отдельным шагом фильтрации.

optimize_qbit_distance_function_reads

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
25.101новая настройка

Заменяет функции расстояния для типа данных QBit на эквивалентные, которые считывают из хранилища только столбцы, необходимые для вычисления.

optimize_read_in_order

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

Включает оптимизацию ORDER BY в запросах SELECT при чтении данных из таблиц MergeTree.

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

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

См. также

optimize_respect_aliases

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

Если задано значение true, будут учитываться псевдонимы в WHERE/GROUP BY/ORDER BY, что поможет при отсечении партиций/использовании вторичных индексов/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count

optimize_sorting_by_input_stream_properties

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

Оптимизирует сортировку с учетом свойств сортировки входного потока

optimize_substitute_columns

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

Используйте ограничения для подстановки столбцов. Значение по умолчанию — false.

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

  • true, false

optimize_syntax_fuse_functions

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.31Оптимизация готова к использованию в продакшне

Включает объединение агрегатных функций с одинаковым аргументом. Переписывает запрос, содержащий как минимум две агрегатные функции sum, count или avg с одинаковым аргументом, заменяя их на sumCount.

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

  • 0 — Функции с одинаковым аргументом не объединяются.
  • 1 — Функции с одинаковым аргументом объединяются.

Пример

Запрос:

CREATE TABLE fuse_tbl(a Int8, b Int8) Engine = Log;
SET optimize_syntax_fuse_functions = 1;
EXPLAIN SYNTAX run_query_tree_passes = 1 SELECT sum(a), sum(b), count(b), avg(b) from fuse_tbl FORMAT TSVRaw;

Результат:

SELECT
    sum(__table1.a) AS `sum(a)`,
    tupleElement(sumCount(__table1.b), 1) AS `sum(b)`,
    tupleElement(sumCount(__table1.b), 2) AS `count(b)`,
    divide(tupleElement(sumCount(__table1.b), 1), toFloat64(tupleElement(sumCount(__table1.b), 2))) AS `avg(b)`
FROM default.fuse_tbl AS __table1

optimize_throw_if_noop

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

Включает или отключает генерацию исключения, если запрос OPTIMIZE не выполнил слияние.

По умолчанию OPTIMIZE завершается успешно, даже если фактически ничего не делает. Этот параметр позволяет различать такие ситуации и получать причину в сообщении об исключении.

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

  • 1 — Генерация исключения включена.
  • 0 — Генерация исключения отключена.

optimize_time_filter_with_preimage

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
24.21Оптимизирует предикаты Date и DateTime, преобразуя функции в эквивалентные сравнения без преобразований (например, toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')

Оптимизирует предикаты Date и DateTime, преобразуя функции в эквивалентные сравнения без преобразований (например, toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')

optimize_truncate_order_by_after_group_by_keys

Тип
Bool
По умолчанию
1
История версий
ВерсияЗначение по умолчаниюКомментарий
26.41Удалять элементы в конце ORDER BY, когда все ключи GROUP BY уже входят в префикс ORDER BY.

Удалять элементы в конце ORDER BY, когда все ключи GROUP BY уже входят в префикс ORDER BY.

optimize_uniq_to_count

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

Преобразует uniq и его варианты (кроме uniqUpTo) в count, если подзапрос содержит DISTINCT или предложение GROUP BY.

optimize_using_constraints

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

Используйте ограничения для оптимизации запроса. Значение по умолчанию — false.

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

  • true, false
Navigation