optimize_trivial_approximate_count_query
Использовать приблизительное значение для оптимизации простого подсчетаcount в хранилищах, поддерживающих такую оценку, например EmbeddedRocksDB.
Возможные значения:
- 0 — Оптимизация отключена.
- 1 — Оптимизация включена.
optimize_trivial_count_query
Включает или отключает оптимизацию тривиального запросаSELECT count() FROM table с использованием метаданных MergeTree. Если требуется использовать безопасность на уровне строки, отключите этот параметр.
Возможные значения:
- 0 — Оптимизация отключена.
- 1 — Оптимизация включена.
optimize_trivial_count_with_sparsity_filter
Расширяет оптимизацию 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
Включает или отключает оптимизацию тривиального запросаSELECT ... FROM table GROUP BY key_expr LIMIT n (без секций HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT, оконных секций и модификаторов GROUP BY), при которой агрегация ограничивается n + offset различными ключами.
Если в проекции нет агрегатных функций, ограничение реализуется установкой 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, а также при включённой настройке exact_rows_before_limit (из-за ограничения rows_before_limit_at_least возвращал бы не более n + offset).
Форма с агрегатными функциями исключает использование кучи top-K для GROUP BY из enable_group_by_top_k_optimization в том же запросе. Куча работает быстрее, поэтому отсечение применяется, только когда куча неприменима: если она отключена, если n + offset превышает query_plan_max_limit_for_top_k_optimization, если задана настройка max_rows_to_group_by или если план запроса сериализуется.
Возможные значения:
- 0 — оптимизация отключена.
- 1 — оптимизация включена.
optimize_trivial_insert_select
Оптимизация тривиального запроса ‘INSERT INTO table SELECT … FROM TABLES’ Используйте эту настройку вместе с явно заданной настройкойmax_insert_threads: оптимизация ограничивает число потоков чтения для SELECT значением
max_insert_threads, что влияет на количество блоков, формируемых SELECT.
optimize_trivial_view_pushdown_to_distributed
Если включено, для представлений поверх таблиц Distributed, в спискеSELECT которых указаны только ссылки на столбцы, *
или выражения (без оконных функций и скалярных подзапросов), а также отсутствуют агрегация, группировка, сортировка и JOIN, полный внешний запрос отправляется
на каждый сегмент. Это позволяет сегменту локально применять фильтры и выражения представления, уменьшая объём данных, передаваемых по сети.
Возможные значения:
- 0 — Оптимизация отключена; представления поверх таблиц
Distributedвсегда выполняются на координаторе. - 1 — Оптимизация включена.