> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# paramètres de session optimize_trivial_*

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

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>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Fonctionnalité expérimentale. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">En savoir plus.</a></u>
        </div>;
};

Ces paramètres sont disponibles dans [system.settings](/docs/fr/reference/system-tables/settings) et sont générés automatiquement à partir du [code source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="optimize_trivial_approximate_count_query">
  ## optimize\_trivial\_approximate\_count\_query
</div>

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

Utilise une valeur approximative pour optimiser les requêtes de comptage triviales sur les stockages qui prennent en charge ce type d’estimation, par exemple EmbeddedRocksDB.

Valeurs possibles :

* 0 — Optimisation désactivée.
  * 1 — Optimisation activée.

<div id="optimize_trivial_count_query">
  ## optimize\_trivial\_count\_query
</div>

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

Active ou désactive l’optimisation de la requête triviale `SELECT count() FROM table` à l’aide des métadonnées de MergeTree. Si vous devez utiliser la sécurité au niveau des lignes, désactivez ce paramètre.

Valeurs possibles :

* 0 — Optimisation désactivée.
  * 1 — Optimisation activée.

Voir aussi :

* [optimize\_functions\_to\_subcolumns](/docs/fr/reference/settings/session-settings/optimize#optimize_functions_to_subcolumns)

<div id="optimize_trivial_count_with_sparsity_filter">
  ## optimize\_trivial\_count\_with\_sparsity\_filter
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "Nouveau paramètre (expérimental) permettant de traiter `SELECT count() FROM t WHERE <pred>` à partir des compteurs `num_defaults` \/ `num_rows` par colonne enregistrés dans `serialization.json` lorsque `<pred>` répartit les lignes entre valeurs par défaut et valeurs non par défaut."}]}]} />

Étend l’optimisation [optimize\_trivial\_count\_query](/docs/fr/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query) aux
requêtes de la forme `SELECT count() FROM t WHERE col <op> const`, où `<op> const`
répartit exactement les lignes entre les valeurs par défaut et les valeurs non par défaut de `col`. Le décompte est alors
obtenu à partir des compteurs `num_defaults` / `num_rows` par colonne que MergeTree
conserve déjà dans `serialization.json`, sans parcours des données.

Motifs reconnus :

* `col = default(col)` / `col != default(col)` pour `Int*` / `UInt*`, `String` /
  `FixedString`, `Date` / `DateTime` / `DateTime64`, `Decimal*`, `UUID`, `IPv4` / `IPv6`.
* `IS NULL` / `IS NOT NULL` sur les colonnes `Nullable`.
* `empty(col)` / `notEmpty(col)` sur les colonnes `String`.
* `col = true` / `col != true` sur les colonnes `Bool`.
* `col > 0`, `col >= 1`, `col < 1`, `col <= 0` sur les colonnes d’entiers non signés.
* `col` / `NOT col` seuls sur les colonnes `Int*`, `UInt*`, `Bool` (test de vérité).

Les motifs d’égalité ne s’appliquent pas à `Float*`, `Enum*`, `Nullable`, `LowCardinality`,
ni aux types composés (`Tuple`, `Array`, `Map`, ...) — pour ceux-ci, le décompte suit le
chemin de parcours normal.

Pour prendre effet, le compteur `num_defaults` par part doit être exact. Activez le
paramètre de table MergeTree `compute_exact_num_defaults_for_sparse_columns` sur la table cible avant
les insertions et les fusions. Les parts écrites sans ce paramètre sont silencieusement exclues de la réécriture, donc
activer uniquement `optimize_trivial_count_with_sparsity_filter` ne suffit pas.

Pour les motifs `IS NULL` / `IS NOT NULL` sur les colonnes `Nullable`, la colonne doit aussi
avoir une entrée `num_defaults` dans `serialization.json`, ce qui n’arrive que lorsque le paramètre de table MergeTree
`nullable_serialization_version` est défini sur `allow_sparse` au moment de l’insert /
merge. Avec la valeur par défaut `basic`, les colonnes `Nullable` n’obtiennent aucune entrée par colonne, donc
l’optimisation ne s’applique tout simplement pas.

Valeurs possibles :

* 0 — Optimisation désactivée.
  * 1 — Optimisation activée.

Voir aussi :

* [optimize\_trivial\_count\_query](/docs/fr/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query)

<div id="optimize_trivial_group_by_limit_query">
  ## optimize\_trivial\_group\_by\_limit\_query
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "Nouveau paramètre qui limite l’agrégation à au plus LIMIT clés distinctes pour les requêtes `SELECT key_expr FROM t GROUP BY key_expr LIMIT n`."}]}]} />

Active ou désactive l’optimisation de la requête triviale `SELECT key_expr FROM table GROUP BY key_expr LIMIT n` (sans fonctions d’agrégation dans la projection, sans clauses `HAVING`/`ORDER BY`/`LIMIT BY`/de fenêtre, et sans modificateurs `GROUP BY`) en définissant `max_rows_to_group_by = n + offset` avec `group_by_overflow_mode = 'any'`. L’agrégation s’arrête dès que `n + offset` clés distinctes ont été produites.

L’optimisation est désactivée lorsque l’utilisateur a explicitement défini `group_by_overflow_mode` sur une valeur autre que `any` (afin de préserver son comportement explicite `throw`/`break`), ainsi que lorsque l’utilisateur a déjà défini une valeur `max_rows_to_group_by` plus restrictive (l’optimisation serait alors sans effet).

Valeurs possibles :

* 0 — Optimisation désactivée.
* 1 — Optimisation activée.

<div id="optimize_trivial_insert_select">
  ## optimize\_trivial\_insert\_select
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "L’optimisation n’a pas de sens dans bien des cas."}]}]} />

Optimiser la requête triviale 'INSERT INTO table SELECT ... FROM TABLES'
