> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# настройки сеанса short_circuit_function_evaluation_*

> Настройки сеанса ClickHouse из сгенерированной группы short_circuit_function_evaluation_*.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Версия", "Значение по умолчанию", "Комментарий"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        История версий
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Тип</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>По умолчанию</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Изменяется без перезапуска
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Эти настройки доступны в [system.settings](/ru/reference/system-tables/settings) и автоматически генерируются на основе [исходного кода](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

## short\_circuit\_function\_evaluation

<SettingsInfoBlock type="ShortCircuitFunctionEvaluation" default_value="enable" />

Позволяет вычислять функции [if](/ru/reference/functions/regular-functions/conditional-functions#if), [multiIf](/ru/reference/functions/regular-functions/conditional-functions#multiIf), [and](/ru/reference/functions/regular-functions/logical-functions#and) и [or](/ru/reference/functions/regular-functions/logical-functions#or) по принципу [короткого замыкания](https://en.wikipedia.org/wiki/Short-circuit_evaluation). Это помогает оптимизировать вычисление сложных выражений в этих функциях и предотвращать возможные исключения (например, деление на ноль там, где оно не должно выполняться).

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

* `enable` — Включает вычисление функций с коротким замыканием для функций, где это применимо (то есть для тех, которые могут сгенерировать исключение или требуют больших вычислительных затрат).
* `force_enable` — Включает вычисление функций с коротким замыканием для всех функций.
* `disable` — Отключает вычисление функций с коротким замыканием.

## short\_circuit\_function\_evaluation\_for\_nulls

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "1"},{"label": "Разрешает выполнять функции с аргументами Nullable только для строк, в которых все аргументы имеют значения, отличные от NULL"}]}]} />

Оптимизирует вычисление функций, которые возвращают NULL, если хотя бы один аргумент равен NULL. Когда доля NULL-значений в аргументах функции превышает short\_circuit\_function\_evaluation\_for\_nulls\_threshold, система пропускает построчное вычисление функции. Вместо этого она сразу возвращает NULL для всех строк, избегая лишних вычислений.

Эта настройка управляет только оптимизацией. Функции, которые не могут быть выполнены со значениями по умолчанию своих аргументов — такие как `parseDateTime`, `IPv4StringToNum` или `intDiv` — всегда пропускают строки, содержащие NULL, независимо от этой настройки: за NULL хранится значение по умолчанию для типа аргумента, и выполнение над ним сгенерировало бы исключение на в остальном корректных данных.

## short\_circuit\_function\_evaluation\_for\_nulls\_threshold

<SettingsInfoBlock type="Double" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "1"},{"label": "Пороговое отношение NULL-значений, при котором функции с аргументами Nullable выполняются только для строк, где во всех аргументах значения отличны от NULL. Применяется, когда включена настройка short_circuit_function_evaluation_for_nulls."}]}]} />

Пороговое отношение NULL-значений, при котором функции с аргументами Nullable выполняются только для строк, где во всех аргументах значения отличны от NULL. Применяется, когда включена настройка short\_circuit\_function\_evaluation\_for\_nulls.
Когда отношение строк, содержащих NULL-значения, к общему числу строк превышает этот порог, строки с NULL-значениями не вычисляются.
