enable_join_fixed_hash_table_conversion
Включает преобразование хеш-таблицы в плоский массив для JOIN, когда ключ представляет собой одно целое число с небольшим диапазоном значений.enable_join_key_only_hash_tables
Использовать хеш-таблицы, в которых хранятся только ключи JOIN, без ссылки на правую строку, для тех JOIN, результат которых заведомо не может содержать значение из правой строки:LEFT ANTI, а также LEFT SEMI, когда не выбран ни один правый столбец. У такой таблицы меньше размер ячейки, и она позволяет отбрасывать правые блоки вместо их хранения.
enable_join_runtime_filters
Фильтровать левую часть по набору ключей JOIN, собранному из правой части во время выполнения.enable_join_runtime_filters_index_analysis
Отсекает гранулы на проверяемой стороне JOIN с помощью фильтра, сформированного во время выполнения на стороне построения; см.enable_join_runtime_filters.
Действует только при use_skip_indexes_on_data_read = 1.
Отсечение возможно только по ключу JOIN, который является столбцом первичного ключа проверяемой стороны или охвачен индексом пропуска данных minmax, set либо bloom_filter.
Если фильтр сохранил точные значения ключа, для отсечения используется предикат IN с набором этих значений; иначе используется диапазон от минимального до максимального значения ключа, что снижает эффективность отсечения.
Действует только при локальном чтении проверяемой стороны JOIN. Дескрипторы, управляющие отсечением, привязываются к этапу чтения при оптимизации плана запроса и не переносятся при перестроении этого этапа для удалённого выполнения. Поэтому отсечение гранул не происходит при использовании параллельных реплик (enable_parallel_replicas = 1) или распределённого плана запроса (make_distributed_plan = 1). В этих режимах настройка не имеет эффекта: результат запроса не меняется, а сам фильтр JOIN, создаваемый во время выполнения, работает точно так же, как при отключённой настройке; не выполняется только отсечение гранул.
Отсечение гранул также не выполняется при чтении проверяемой стороны с FINAL (отсечение для чтения с FINAL не реализовано, а optimizeLazyFinal перестраивает такой этап чтения без дескрипторов), а также для таблиц с данными, ожидающими обработки, мутациями ALTER или патч-частями. В этих случаях настройка тоже не имеет эффекта.
enable_join_transitive_predicates
Выводит транзитивные предикаты эквисоединения из существующих условий JOIN. Например, если заданыA.x = B.x и B.x = C.x, добавляется синтетический предикат A.x = C.x,
чтобы оптимизатор порядка JOIN мог учитывать прямые планы (A JOIN C).