Эти настройки доступны в system.settings и автоматически генерируются на основе исходного кода.
optimize_and_compare_chain
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.2 | 1 | Новая настройка |
Добавляет сравнения с константой в цепочках AND для улучшения фильтрации. Поддерживаются операторы <, <=, >, >=, = и их сочетания. Например, (a < b) AND (b < c) AND (c < 5) будет преобразовано в (a < b) AND (b < c) AND (c < 5) AND indexHint(b < 5) AND indexHint(a < 5). Производные сравнения оборачиваются в indexHint: они участвуют в анализе индексов (первичный ключ, ключ партиционирования, индексы пропуска данных) и сокращают набор данных для чтения, но не требуют затрат на обработку каждой строки и не влияют на PREWHERE. Сравнение, выведенное через выражения разных таблиц, остаётся исполнимым ((t1.a < t2.b) AND (t2.b < 5) выводит обычное t1.a < 5): это единственное условие, которое можно передать ниже JOIN, где оно фильтрует входные данные JOIN, недоступные исходной цепочке. Производные сравнения, противоречащие существующему условию, также добавляются как обычные условия, поэтому AND сворачивается в false.
optimize_and_compare_chain_max_hash_work
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.7 | 5000000 | Новая настройка, ограничивающая объём работы оптимизации `optimize_and_compare_chain` (измеряемый количеством хешируемых узлов дерева запроса), чтобы она не занимала основное время при анализе запросов с очень большим числом или очень длинными цепочками сравнений, объединённых `AND`. Прежнее значение `0` (без ограничений) воспроизводит поведение до 26.7, когда оптимизация ничем не ограничивалась, поэтому при `compatibility`, установленном на более раннюю версию, транзитивные предикаты по-прежнему будут выводиться без бюджета. Установите `0`, чтобы отключить бюджет. |
Бюджет работы для оптимизации optimize_and_compare_chain на этапе анализа запроса, измеряемый количеством узлов дерева запроса, хешируемых функцией getTreeHash (это основная стоимость данной оптимизации). Как только при применении этой оптимизации запрос хеширует больше узлов, чем задано этим значением, она перестаёт применяться для оставшейся части запроса. Это ограничивает время анализа для запросов с очень большим числом или очень длинными цепочками сравнений, объединённых AND, где иначе эта оптимизация может занимать основное время анализа, не давая никакого эффекта свёртки. Преждевременная остановка всегда безопасна: она лишь означает отказ от оптимизации и никогда не меняет результаты. Установите 0, чтобы отключить бюджет (без ограничений).