Эти настройки доступны в system.settings и автоматически формируются на основе исходного кода.
optimize_aggregators_of_group_by_keys
Исключает агрегаторы min/max/any/anyLast для ключей GROUP BY в разделе SELECT
optimize_append_index
Используйте ограничения для добавления условия индекса. Значение по умолчанию — false.
Возможные значения:
- true, false
optimize_arithmetic_operations_in_aggregate_functions
Вынести арифметические операции из агрегатных функций
optimize_const_name_size
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.11 | 256 | Заменять большими константами на скалярные значения и использовать хеш в качестве имени (размер оценивается по длине имени) |
Заменять большие константы на скалярные значения и использовать хеш в качестве имени (размер оценивается по длине имени).
Возможные значения:
- положительное целое число — максимальная длина имени,
- 0 — всегда,
- отрицательное целое число — никогда.
optimize_count_from_files
Включает или отключает оптимизацию подсчета числа строк в файлах различных входных форматов. Применяется к табличным функциям/движкам file/s3/url/hdfs/azureBlobStorage.
Возможные значения:
- 0 — Оптимизация отключена.
- 1 — Оптимизация включена.
optimize_dictget_tuple_element
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.5 | 1 | Заменяет 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
Включает оптимизацию DISTINCT, если некоторые столбцы в DISTINCT являются префиксом сортировки. Например, префиксом ключа сортировки в MergeTree или оператора ORDER BY.
optimize_distributed_group_by_sharding_key
Оптимизирует запросы GROUP BY sharding_key, позволяя избежать затратной агрегации на инициирующем сервере (что уменьшает использование памяти для запроса на инициирующем сервере).
Поддерживаются следующие типы запросов (и любые их комбинации):
SELECT DISTINCT [..., ]sharding_key[, ...] FROM distSELECT ... FROM dist GROUP BY sharding_key[, ...]SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY xSELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
Следующие типы запросов не поддерживаются (поддержка некоторых из них может быть добавлена позже):
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALSSELECT ... GROUP BY sharding_key[, ...] WITH ROLLUPSELECT ... GROUP BY sharding_key[, ...] WITH CUBESELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
Возможные значения:
- 0 — Отключено.
- 1 — Включено.
См. также:
optimize_dry_run_check_part
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.2 | 1 | Новая настройка |
При включении OPTIMIZE ... DRY RUN проверяет получившуюся слитую часть с помощью checkDataPart. Если проверка не проходит, генерируется исключение.
optimize_empty_string_comparisons
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.10 | 1 | Новая настройка. |
Преобразует выражения вида col = '' или '' = col в empty(col), а col != '' или '' != col — в notEmpty(col) только в случаях, когда col имеет тип String или FixedString.
optimize_extract_common_expressions
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.1 | 1 | Оптимизация выражений WHERE, PREWHERE, ON, HAVING и QUALIFY за счет вынесения общих выражений из дизъюнкций конъюнкций. |
| 24.12 | 0 | Добавлена настройка для оптимизации выражений 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
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 24.8 | 1 | Настройка включена по умолчанию |
Включает или отключает оптимизацию, при которой некоторые функции преобразуются в чтение подстолбцов. Это уменьшает объем считываемых данных.
Можно преобразовать следующие функции:
- length для чтения подстолбца size0.
- empty для чтения подстолбца size0.
- notEmpty для чтения подстолбца size0.
- isNull для чтения подстолбца null.
- isNotNull для чтения подстолбца null.
- count для чтения подстолбца null.
- mapKeys для чтения подстолбца keys.
- mapValues для чтения подстолбца values.
Возможные значения:
- 0 — Оптимизация отключена.
- 1 — Оптимизация включена.
optimize_inverse_dictionary_lookup
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.12 | 1 | Новая настройка |
Позволяет избежать повторных обратных обращений к словарю за счёт более быстрого поиска в предварительно вычисленном наборе возможных значений ключей.
optimize_multiif_to_if
Заменяет 'multiIf' с одним условием на 'if'.
optimize_normalize_count_variants
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 21.3 | 1 | По умолчанию переписывает агрегатные функции, семантически эквивалентные count(), в count() |
Переписывает агрегатные функции, семантически эквивалентные count(), в count().
optimize_on_insert
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 21.1 | 1 | Включает оптимизацию данных при 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
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.6 | 0 | Новая настройка, включающая второй проход вынесения в PREWHERE, чтобы объединять с существующей цепочкой PREWHERE фильтры, добавленные выше шага чтения MergeTree более поздними оптимизациями (pushdown предикатов через JOIN, переписывание projection). |
Выполняет второй проход вынесения в PREWHERE после того, как более поздние оптимизации плана запроса
могли добавить дополнительные фильтры выше шага чтения MergeTree (например, pushdown предикатов через
JOIN, переписывание projection). Если PREWHERE уже есть, новый
фильтр объединяется с ним через AND, а не остаётся отдельным шагом фильтрации.
optimize_qbit_distance_function_reads
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.10 | 1 | новая настройка |
Заменяет функции расстояния для типа данных QBit на эквивалентные, которые считывают из хранилища только столбцы, необходимые для вычисления.
optimize_read_in_order
Включает оптимизацию ORDER BY в запросах SELECT при чтении данных из таблиц MergeTree.
Возможные значения:
- 0 — оптимизация
ORDER BYотключена. - 1 — оптимизация
ORDER BYвключена.
См. также
optimize_respect_aliases
Если задано значение true, будут учитываться псевдонимы в WHERE/GROUP BY/ORDER BY, что поможет при отсечении партиций/использовании вторичных индексов/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count
optimize_sorting_by_input_stream_properties
Оптимизирует сортировку с учетом свойств сортировки входного потока
optimize_substitute_columns
Используйте ограничения для подстановки столбцов. Значение по умолчанию — false.
Возможные значения:
- true, false
optimize_syntax_fuse_functions
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.3 | 1 | Оптимизация готова к использованию в продакшне |
Включает объединение агрегатных функций с одинаковым аргументом. Переписывает запрос, содержащий как минимум две агрегатные функции 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 __table1optimize_throw_if_noop
Включает или отключает генерацию исключения, если запрос OPTIMIZE не выполнил слияние.
По умолчанию OPTIMIZE завершается успешно, даже если фактически ничего не делает. Этот параметр позволяет различать такие ситуации и получать причину в сообщении об исключении.
Возможные значения:
- 1 — Генерация исключения включена.
- 0 — Генерация исключения отключена.
optimize_time_filter_with_preimage
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 24.2 | 1 | Оптимизирует предикаты 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
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.4 | 1 | Удалять элементы в конце ORDER BY, когда все ключи GROUP BY уже входят в префикс ORDER BY. |
Удалять элементы в конце ORDER BY, когда все ключи GROUP BY уже входят в префикс ORDER BY.
optimize_uniq_to_count
Преобразует uniq и его варианты (кроме uniqUpTo) в count, если подзапрос содержит DISTINCT или предложение GROUP BY.
optimize_using_constraints
Используйте ограничения для оптимизации запроса. Значение по умолчанию — false.
Возможные значения:
- true, false