> ## 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.

# paramètres de session optimize_and_compare_chain_*

> Paramètres de session ClickHouse du groupe généré optimize_and_compare_chain_*.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Valeur par défaut", "Commentaire"];
  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
  }}>
        Historique des versions
      </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
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Par défaut</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Modifiable sans redémarrage
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Ces paramètres sont disponibles dans [system.settings](/fr/reference/system-tables/settings) et sont générés automatiquement à partir de la [source](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": "Nouveau paramètre"}]}]} />

Propage les comparaisons avec des constantes dans les chaînes AND afin d'améliorer le filtrage. Prend en charge les opérateurs `<`, `<=`, `>`, `>=`, `=` ainsi que leurs combinaisons. Par exemple, `(a < b) AND (b < c) AND (c < 5)` deviendrait `(a < b) AND (b < c) AND (c < 5) AND indexHint(b < 5) AND indexHint(a < 5)`. Les comparaisons dérivées sont encapsulées dans `indexHint` : elles participent à l'analyse des index (clé primaire, clé de partition, index de saut) et réduisent l'ensemble de données lu, mais n'ont aucun coût par ligne et n'affectent pas PREWHERE. Une comparaison dérivée via des expressions de tables différentes reste exécutable (`(t1.a < t2.b) AND (t2.b < 5)` dérive la condition simple `t1.a < 5`) : c'est la seule condition pouvant être poussée sous la jointure, où elle filtre une entrée de jointure que la chaîne d'origine ne peut pas atteindre. Les comparaisons dérivées qui contredisent une condition existante sont également ajoutées comme conditions simples, de sorte que le `AND` se réduit à `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": "Nouveau paramètre qui borne le travail de l’optimisation `optimize_and_compare_chain` (mesuré en nœuds d’arbre de requête hachés) afin qu’elle ne monopolise pas l’analyse des requêtes comportant de très nombreuses chaînes `AND` de comparaisons ou des chaînes très longues. La valeur précédente `0` (illimitée) reproduit le comportement antérieur à la version 26.7, où l’optimisation n’était pas bornée ; ainsi, `compatibility` défini sur une version antérieure continue de dériver des prédicats transitifs sans budget. Définissez `0` pour désactiver le budget."}]}]} />

Budget de travail de l’optimisation `optimize_and_compare_chain` pendant l’analyse de requête, mesuré en nombre de nœuds d’arbre de requête hachés par `getTreeHash` (le coût dominant de cette optimisation). Lorsqu’une requête a haché plus de ce nombre de nœuds pendant l’application de l’optimisation, celle-ci cesse d’être appliquée pour le reste de la requête. Cela borne le temps d’analyse des requêtes comportant de très nombreuses chaînes `AND` de comparaisons ou des chaînes très longues, pour lesquelles l’optimisation pourrait sinon monopoliser l’analyse sans rien simplifier. Cet arrêt anticipé est toujours sûr : il se contente de renoncer à une optimisation et ne modifie jamais les résultats. Définissez `0` pour désactiver le budget (illimité).
