> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# SETTINGS de sesión de optimize_and_compare_chain_*

> SETTINGS de sesión de ClickHouse en el grupo generado optimize_and_compare_chain_*.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Versión", "Valor predeterminado", "Comentario"];
  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
  }}>
        Historial de versiones
      </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
  }}>Tipo</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Predeterminado</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Modificable sin reiniciar
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Estos SETTINGS están disponibles en [system.settings](/es/reference/system-tables/settings) y se autogeneran a partir del [código fuente](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="optimize_and_compare_chain">
  ## optimize\_and\_compare\_chain
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.2"},{"label": "1"},{"label": "Una nueva configuración"}]}]} />

Propaga las comparaciones con constantes en cadenas AND para mejorar la capacidad de filtrado. Admite los operadores `<`, `<=`, `>`, `>=`, `=` y combinaciones de ellos. Por ejemplo, `(a < b) AND (b < c) AND (c < 5)` sería `(a < b) AND (b < c) AND (c < 5) AND indexHint(b < 5) AND indexHint(a < 5)`. Las comparaciones derivadas se incluyen en `indexHint`: participan en el análisis de índices (clave primaria, clave de partición, índices de omisión) y podan el conjunto de lectura, pero no tienen coste por fila ni afectan a PREWHERE. Una comparación derivada mediante expresiones de tablas distintas sigue siendo ejecutable (`(t1.a < t2.b) AND (t2.b < 5)` deriva la condición simple `t1.a < 5`): es la única condición que puede insertarse por debajo del join, donde filtra una entrada del join a la que la cadena original no puede llegar. Las comparaciones derivadas que contradicen una condición existente también se añaden como condiciones simples, de modo que el `AND` se reduce a `false`.

<div id="optimize_and_compare_chain_max_hash_work">
  ## optimize\_and\_compare\_chain\_max\_hash\_work
</div>

<SettingsInfoBlock type="UInt64" default_value="5000000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "5000000"},{"label": "Nueva configuración que limita el trabajo de la optimización `optimize_and_compare_chain` (medido en nodos del árbol de consulta procesados con hash) para que no llegue a dominar el análisis de consultas con muchísimas cadenas `AND` de comparaciones o cadenas `AND` muy grandes. El valor anterior `0` (ilimitado) reproduce el comportamiento anterior a la versión 26.7, en el que la optimización no tenía límite, por lo que `compatibility` configurado con una versión anterior sigue derivando predicados transitivos sin presupuesto. Establézcalo en `0` para desactivar el presupuesto."}]}]} />

Presupuesto de trabajo para la optimización `optimize_and_compare_chain` durante el análisis de consultas, medido por la cantidad de nodos del árbol de consulta para los que `getTreeHash` calcula el hash (el costo dominante de esta optimización). Una vez que una consulta ha calculado el hash de más nodos que este límite mientras aplica la optimización, deja de aplicarla durante el resto de la consulta. Esto limita el tiempo de análisis de consultas con muchísimas cadenas `AND` de comparaciones o cadenas `AND` muy grandes, en las que, de otro modo, la optimización podría llegar a dominar el análisis sin simplificar nada. Detenerse antes siempre es seguro: solo se renuncia a una optimización y nunca se alteran los resultados. Establézcalo en `0` para desactivar el presupuesto (ilimitado).
