> ## 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 query_plan_*

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

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" 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
        </a>;
};

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 du [code source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="query_plan_aggregation_in_order">
  ## query\_plan\_aggregation\_in\_order
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "22.12"},{"label": "1"},{"label": "Active certaines refactorisations autour du plan de requête"}]}]} />

Active ou désactive l’optimisation d’agrégation dans l’ordre au niveau du plan de requête.
Ne prend effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs que pour le débogage. Ce paramètre pourra à l’avenir changer de manière non rétrocompatible ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_convert_any_join_to_semi_or_anti_join">
  ## query\_plan\_convert\_any\_join\_to\_semi\_or\_anti\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "Nouveau paramètre."}]}]} />

Permet de convertir ANY JOIN en SEMI ou ANTI JOIN si le filtre après JOIN renvoie toujours false pour les lignes correspondantes ou non correspondantes

<div id="query_plan_convert_join_to_in">
  ## query\_plan\_convert\_join\_to\_in
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "0"},{"label": "Nouveau paramètre"}]}]} />

Permet de convertir un `JOIN` en sous-requête avec `IN` si les colonnes de sortie sont liées uniquement à la table de gauche. Peut produire des résultats incorrects avec des `JOIN` autres que `ANY JOIN` (par ex. `ALL JOIN`, qui est la valeur par défaut).

<div id="query_plan_convert_outer_join_to_inner_join">
  ## query\_plan\_convert\_outer\_join\_to\_inner\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.4"},{"label": "1"},{"label": "Permet de convertir OUTER JOIN en INNER JOIN si le filtre appliqué après JOIN exclut toujours les valeurs par défaut"}]}]} />

Permet de convertir `OUTER JOIN` en `INNER JOIN` si le filtre appliqué après `JOIN` exclut toujours les valeurs par défaut

<div id="query_plan_direct_read_from_text_index">
  ## query\_plan\_direct\_read\_from\_text\_index
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "1"},{"label": "L’index de texte est désormais GA"}]}, {"id": "row-2","items": [{"label": "25.9"},{"label": "1"},{"label": "Nouveau paramètre."}]}]} />

Permet d’effectuer le filtrage de recherche en texte intégral en s’appuyant uniquement sur l’index de texte inversé dans le plan de requête.

<div id="query_plan_display_internal_aliases">
  ## query\_plan\_display\_internal\_aliases
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "0"},{"label": "Nouveau paramètre"}]}]} />

Afficher les alias internes (tels que \_\_table1) dans EXPLAIN PLAN au lieu de ceux spécifiés dans la requête d’origine.

<div id="query_plan_enable_multithreading_after_window_functions">
  ## query\_plan\_enable\_multithreading\_after\_window\_functions
</div>

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

Activer le multithreading après l’évaluation des fonctions de fenêtre afin de permettre le traitement parallèle des flux

<div id="query_plan_enable_optimizations">
  ## query\_plan\_enable\_optimizations
</div>

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

Active ou désactive l’optimisation des requêtes au niveau du plan de requête.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs qu’à des fins de débogage. Ce paramètre pourra évoluer à l’avenir de manière non rétrocompatible, voire être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver toutes les optimisations au niveau du plan de requête
* 1 - Activer les optimisations au niveau du plan de requête (mais certaines optimisations peuvent toujours être désactivées via leurs paramètres individuels)

<div id="query_plan_execute_functions_after_sorting">
  ## query\_plan\_execute\_functions\_after\_sorting
</div>

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

Active ou désactive une optimisation au niveau du plan de requête qui déplace les expressions après les étapes de tri.
N’a d’effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) est défini sur 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne devrait être utilisé par les développeurs qu’à des fins de débogage. Ce paramètre peut, à l’avenir, changer de manière non rétrocompatible ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_filter_push_down">
  ## query\_plan\_filter\_push\_down
</div>

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

Active ou désactive une optimisation au niveau du plan de requête qui fait descendre les filtres dans le plan d’exécution.
N’a d’effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) est défini sur 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, à utiliser uniquement par les développeurs pour le débogage. Ce paramètre pourra évoluer à l’avenir de manière non rétrocompatible, ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_join_shard_by_pk_ranges">
  ## query\_plan\_join\_shard\_by\_pk\_ranges
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "0"},{"label": "Nouveau paramètre"}]}]} />

Applique le sharding pour JOIN si les clés de jointure contiennent un préfixe de PRIMARY KEY dans les deux tables. Pris en charge par les algorithmes hash, parallel\_hash, full\_sorting\_merge et parallel\_full\_sorting\_merge. En général, cela n'accélère pas les requêtes, mais peut réduire la consommation de mémoire.

<div id="query_plan_join_swap_table">
  ## query\_plan\_join\_swap\_table
</div>

<SettingsInfoBlock type="BoolAuto" default_value="auto" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "auto"},{"label": "Nouveau paramètre. La table de droite était toujours choisie auparavant."}]}]} />

Détermine de quel côté de la jointure doit se trouver la table de build (également appelée table interne, c'est celle qui est insérée dans la table de hachage lors d'un hash join) dans le plan de requête. Ce paramètre est pris en charge uniquement avec la strictness de jointure `ALL` et la clause `JOIN ON`. Valeurs possibles :

* 'auto' : laisser le planificateur décider quelle table utiliser comme table de build.
* 'false' : ne jamais permuter les tables (la table de droite est la table de build).
* 'true' : toujours permuter les tables (la table de gauche est la table de build).

<div id="query_plan_lift_up_array_join">
  ## query\_plan\_lift\_up\_array\_join
</div>

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

Active ou désactive une optimisation au niveau du plan de requête qui remonte les ARRAY JOIN dans le plan d'exécution.
Ce paramètre n'a d'effet que si [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s'agit d'un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs que pour le débogage. Ce paramètre pourra être modifié ultérieurement de manière non rétrocompatible, voire supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_lift_up_union">
  ## query\_plan\_lift\_up\_union
</div>

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

Active ou désactive une optimisation au niveau du plan de requête, qui fait remonter des sous-arbres plus importants du plan de requête dans l’union afin de permettre d’autres optimisations.
Ne prend effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts qui ne doit être utilisé par les développeurs que pour le débogage. Ce paramètre peut évoluer à l’avenir de manière non rétrocompatible, ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_max_limit_for_join_lazy_indexing">
  ## query\_plan\_max\_limit\_for\_join\_lazy\_indexing
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1000"},{"label": "Nouveau paramètre ajouté pour contrôler la limite maximale autorisant l’utilisation du plan de requête pour l’optimisation d’indexation paresseuse des JOIN. Si la valeur est zéro, il n’y a pas de limite"}]}]} />

Contrôle la limite maximale autorisant l’utilisation du plan de requête pour l’optimisation d’indexation paresseuse dans JOIN. Si la valeur est zéro, il n’y a pas de limite.

<div id="query_plan_max_limit_for_lazy_materialization">
  ## query\_plan\_max\_limit\_for\_lazy\_materialization
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "10"},{"label": "Ajout d'un nouveau paramètre pour contrôler la valeur maximale de LIMIT autorisant l'utilisation du plan de requête pour l'optimisation de la matérialisation différée. Si cette valeur est égale à zéro, il n'y a pas de limite"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10000"},{"label": "Augmentation de la limite après amélioration des performances"}]}, {"id": "row-3","items": [{"label": "25.11"},{"label": "100"},{"label": "Plus optimisé"}]}]} />

Contrôle la valeur maximale de LIMIT autorisant l'utilisation du plan de requête pour l'optimisation de la matérialisation différée. Si cette valeur est égale à zéro, il n'y a pas de limite.

<div id="query_plan_max_limit_for_top_k_optimization">
  ## query\_plan\_max\_limit\_for\_top\_k\_optimization
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1000"},{"label": "Nouveau paramètre."}]}]} />

Définit la valeur maximale de la limite autorisant l’évaluation du plan de requête pour l’optimisation TopK à l’aide de l’index de saut minmax et du filtrage dynamique par seuil. Si elle vaut zéro, aucune limite n’est appliquée.

<div id="query_plan_max_optimizations_to_apply">
  ## query\_plan\_max\_optimizations\_to\_apply
</div>

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

Limite le nombre total d'optimisations appliquées au plan de requête ; voir le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations).
Permet d'éviter des temps d'optimisation trop longs pour les requêtes complexes.
Dans une requête EXPLAIN PLAN, cesse d'appliquer les optimisations une fois cette limite atteinte et renvoie le plan tel quel.
Lors de l'exécution normale des requêtes, si le nombre réel d'optimisations dépasse ce paramètre, une exception est levée.

<Note>
  Il s'agit d'un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs qu'à des fins de débogage. Ce paramètre peut évoluer à l'avenir de manière non rétrocompatible, voire être supprimé.
</Note>

<div id="query_plan_max_set_size_for_projection_match">
  ## query\_plan\_max\_set\_size\_for\_projection\_match
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "10000"},{"label": "Ajout d’un nouveau paramètre qui limite le coût des ensembles de clauses IN hachés par contenu dans le mécanisme de correspondance des projections (actuellement : projection d’agrégation). Les ensembles qui dépassent cette limite sont considérés comme non correspondants. La valeur zéro désactive entièrement la comparaison par hachage de contenu (valeur de compatibilité : la correspondance de projection ne réussit jamais pour les nœuds contenant des ensembles IN)."}]}]} />

Nombre maximal de lignes dans un ensemble de clause `IN` pour lequel le mécanisme de correspondance des projections calcule et compare des hachages de contenu afin de déterminer si deux ensembles sont égaux. Les ensembles plus grands que cette valeur sont considérés comme non correspondants et la projection est ignorée. La valeur zéro désactive entièrement la comparaison par hachage de contenu : une correspondance de projection ne réussit jamais pour les nœuds contenant des ensembles de clause `IN`.

Utilisé par le mécanisme de correspondance des projections d’agrégation (et par tout futur mécanisme de correspondance des projections devant comparer des ensembles de clause `IN`). Le calcul du hachage de contenu est en `O(N log N)` par rapport au nombre d’éléments de l’ensemble ; ce paramètre limite le coût de la planification lorsque de nombreuses clauses `IN` apparaissent dans la requête ou la projection.

<div id="query_plan_max_step_description_length">
  ## query\_plan\_max\_step\_description\_length
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "500"},{"label": "Nouveau paramètre"}]}]} />

Longueur maximale de la description d’étape dans EXPLAIN PLAN.

<div id="query_plan_merge_expression_into_join">
  ## query\_plan\_merge\_expression\_into\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "1"},{"label": "Nouveau paramètre. Permet de fusionner l’étape Expression avec l’étape JOIN lors de l’optimisation du réordonnancement des jointures."}]}]} />

Permet de fusionner des expressions avec l’étape JOIN lors de l’optimisation du réordonnancement des jointures.

<div id="query_plan_merge_expressions">
  ## query\_plan\_merge\_expressions
</div>

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

Active une optimisation au niveau du plan de requête qui fusionne les filtres successifs.
N’a d’effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne devrait être utilisé par les développeurs qu’à des fins de débogage. Ce paramètre pourra à l’avenir évoluer de manière non rétrocompatible ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_merge_filter_into_join_condition">
  ## query\_plan\_merge\_filter\_into\_join\_condition
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "Ajout d’un nouveau paramètre permettant d’intégrer le filtre à la condition de jointure"}]}]} />

Permet d’intégrer le filtre à la condition `JOIN` et de convertir `CROSS JOIN` en `INNER`.

<div id="query_plan_merge_filters">
  ## query\_plan\_merge\_filters
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "Permet de fusionner les filtres dans le plan de requête"}]}, {"id": "row-2","items": [{"label": "24.11"},{"label": "1"},{"label": "Permet de fusionner les filtres dans le plan de requête. Ceci est nécessaire pour prendre correctement en charge le push-down des filtres avec l’analyseur."}]}]} />

Permet de fusionner les filtres dans le plan de requête.

<div id="query_plan_min_columns_for_join_lazy_indexing">
  ## query\_plan\_min\_columns\_for\_join\_lazy\_indexing
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "3"},{"label": "Contrôle le nombre minimal de colonnes de charge utile du côté gauche nécessaire pour activer l’optimisation d’indexation paresseuse dans JOIN"}]}]} />

Contrôle le nombre minimal de colonnes de charge utile du côté gauche nécessaire pour activer l’optimisation d’indexation paresseuse dans JOIN. 0 signifie que l’optimisation est désactivée.

<div id="query_plan_optimize_count_from_text_index">
  ## query\_plan\_optimize\_count\_from\_text\_index
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "New setting"}]}]} />

Permet de répondre à `SELECT count() ... WHERE <text search predicate>` directement à partir de la cardinalité des listes de publication de l’index de texte, sans matérialiser les lignes correspondantes.
Ne prend effet que si `query_plan_direct_read_from_text_index` est activé.

<div id="query_plan_optimize_join_order_algorithm">
  ## query\_plan\_optimize\_join\_order\_algorithm
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="JoinOrderAlgorithm" default_value="greedy" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "greedy"},{"label": "Nouveau paramètre expérimental."}]}]} />

Spécifie quels algorithmes d’ordre des jointures essayer lors de l’optimisation du plan de requête. Les algorithmes suivants sont disponibles :

* 'greedy' - algorithme glouton de base - est rapide, mais peut ne pas produire le meilleur ordre de jointure
* 'dpsize' - implémente l’algorithme DPsize, actuellement uniquement pour les jointures internes - prend en compte tous les ordres de jointure possibles et trouve le plus optimal, mais peut être lent pour les requêtes comportant de nombreuses tables et de nombreux prédicats de jointure.
* 'dpsub' - implémente l’algorithme DPsub, qui prend en charge à la fois les jointures internes et les jointures autres qu’internes - prend en compte tous les ordres de jointure possibles et trouve le plus optimal, mais peut être lent pour les requêtes comportant de nombreuses tables et de nombreux prédicats de jointure.
* 'dphyp' - implémente l’algorithme DPhyp (Dynamic Programming via Hypergraph Partitioning), actuellement uniquement pour les jointures internes - explore le même espace de recherche que `dpsize`, mais n’énumère que les paires de sous-graphes connectés, ce qui génère moins de jointures intermédiaires sur des graphes de jointure clairsemés, au prix de ne pas prendre en compte les produits cartésiens
  Plusieurs algorithmes peuvent être spécifiés sous forme de liste séparée par des virgules, par exemple `dphyp,greedy`. Ils sont essayés dans l’ordre ; si un algorithme ne peut pas traiter la requête (par exemple, en raison de jointures externes ou de composantes non connexes), le suivant est utilisé comme solution de repli.

<div id="query_plan_optimize_join_order_limit">
  ## query\_plan\_optimize\_join\_order\_limit
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "Nouveau paramètre"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10"},{"label": "Autoriser par défaut le réordonnancement des JOIN avec un plus grand nombre de tables"}]}]} />

Optimise l'ordre des jointures au sein d'une même sous-requête. Cette fonctionnalité n'est actuellement prise en charge que dans des cas très limités.
La valeur correspond au nombre maximal de tables à optimiser.

<div id="query_plan_optimize_join_order_max_searched_plans">
  ## query\_plan\_optimize\_join\_order\_max\_searched\_plans
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "100000"},{"label": "Nouveau paramètre permettant de limiter le nombre de plans partiels que l'optimiseur de l'ordre des jointures énumère avant de basculer vers l'algorithme suivant."}]}]} />

Nombre maximal de plans partiels que l'optimiseur de l'ordre des jointures peut énumérer avant d'abandonner et de basculer vers l'algorithme suivant dans `query_plan_optimize_join_order_algorithm`.
Cette limite borne de manière déterministe le temps d'optimisation (indépendamment du temps écoulé) sur des graphes de jointures denses, tels que des cliques ou des étoiles, où l'espace de recherche croît exponentiellement.
Définissez cette valeur sur 0 pour désactiver la limite. Cela n'a aucun effet sur la valeur par défaut `query_plan_optimize_join_order_limit`, pour laquelle la recherche reste toujours bien en deçà de cette limite.

<div id="query_plan_optimize_join_order_randomize">
  ## query\_plan\_optimize\_join\_order\_randomize
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "Nouveau paramètre permettant d’aléatoiriser les statistiques d’ordre des jointures à des fins de test."}]}]} />

Lorsqu’il est différent de zéro, l’optimiseur de l’ordre des jointures utilise des cardinalités et des NDV générées aléatoirement au lieu de statistiques réelles.
Lorsqu’il est défini sur 1, une graine aléatoire est générée ; lorsqu’il est défini sur une valeur > 1, cette valeur est utilisée directement comme graine.
Ce paramètre est destiné aux tests afin de détecter les erreurs causées par différents ordres de jointure.

<div id="query_plan_optimize_lazy_final">
  ## query\_plan\_optimize\_lazy\_final
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "Nouveau paramètre pour optimiser la lecture avec FINAL à partir de ReplacingMergeTree à l’aide d’une analyse d’index basée sur un ensemble"}]}]} />

Optimise la lecture avec FINAL à partir de ReplacingMergeTree en construisant un ensemble de clés primaires, puis en l’utilisant pour l’analyse d’index.

<div id="query_plan_optimize_lazy_materialization">
  ## query\_plan\_optimize\_lazy\_materialization
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "Ajout d’un nouveau paramètre pour utiliser le plan de requête pour l’optimisation par matérialisation différée"}]}]} />

Utiliser le plan de requête pour l’optimisation par matérialisation différée.

<div id="query_plan_optimize_lazy_materialization_for_object_storage">
  ## query\_plan\_optimize\_lazy\_materialization\_for\_object\_storage
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "Nouveau paramètre permettant d'utiliser la matérialisation différée pour les requêtes `ORDER BY ... LIMIT n` lisant des fichiers Parquet depuis le stockage d'objets, y compris les tables Iceberg."}]}]} />

Utilise l'optimisation de matérialisation différée pour lire des fichiers Parquet depuis le stockage d'objets, y compris les tables Iceberg : pour les requêtes `ORDER BY ... LIMIT n`, les colonnes inutiles pour le tri et le filtrage ne sont lues que pour les `n` lignes conservées après application de `LIMIT`. Ne prend effet que si `query_plan_optimize_lazy_materialization` est activé.

<div id="query_plan_optimize_prewhere">
  ## query\_plan\_optimize\_prewhere
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.2"},{"label": "1"},{"label": "Permet de pousser le filtre dans l'expression PREWHERE pour les moteurs de stockage pris en charge"}]}]} />

Permet de pousser le filtre dans l'expression PREWHERE pour les moteurs de stockage pris en charge

<div id="query_plan_push_down_limit">
  ## query\_plan\_push\_down\_limit
</div>

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

Active une optimisation au niveau du plan de requête qui pousse les `LIMIT` vers le bas dans le plan d'exécution.
N'a d'effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) est défini sur 1.

<Note>
  Il s'agit d'un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs qu'à des fins de débogage. Ce paramètre peut à l'avenir évoluer de manière non rétrocompatible, voire être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_push_limit_by_into_sort">
  ## query\_plan\_push\_limit\_by\_into\_sort
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1"},{"label": "Nouveau paramètre qui intègre un LIMIT BY par flux au pipeline de tri lorsque les colonnes de LIMIT BY sont un préfixe de ORDER BY, ce qui réduit le nombre de lignes transmises à la fusion finale."}]}]} />

Active ou désactive une optimisation au niveau du plan de requête pour les requêtes `ORDER BY ... LIMIT BY`. Lorsque les colonnes de `LIMIT BY` sont un préfixe de la clause `ORDER BY`, chaque flux trié en parallèle applique `LIMIT BY` avant que les flux ne soient fusionnés en un seul, ce qui réduit le nombre de lignes traitées par la fusion finale et les étapes suivantes du pipeline. Accélère les requêtes dans lesquelles `LIMIT BY` écarte une grande partie des lignes.

Ne prend effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_read_in_order">
  ## query\_plan\_read\_in\_order
</div>

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

Active ou désactive l’optimisation de lecture ordonnée au niveau du plan de requête.
Ne prend effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) est défini sur 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs que pour le débogage. Ce paramètre peut évoluer ultérieurement de manière non rétrocompatible ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_read_in_order_through_join">
  ## query\_plan\_read\_in\_order\_through\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "Nouveau paramètre"}]}]} />

Conserve la lecture dans l’ordre depuis la table de gauche lors des opérations JOIN, afin qu’elle puisse être utilisée par les étapes suivantes.

<div id="query_plan_read_in_order_through_spilling_join">
  ## query\_plan\_read\_in\_order\_through\_spilling\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "Nouveau paramètre permettant de propager la lecture dans l'ordre à travers une hash join avec un seuil de déversement automatique, en maintenant cette jointure en mémoire afin de préserver l'ordre promis. previous_value=false afin que `compatibility` avec les versions antérieures à 26.8 rétablisse le comportement conservateur préexistant, dans lequel une telle jointure n'est jamais utilisée pour la lecture dans l'ordre, mais peut toujours déverser des données sur disque."}]}]} />

Permet à [`query_plan_read_in_order_through_join`](/fr/reference/settings/session-settings/query-plan#query_plan_read_in_order_through_join) de s'appliquer également à une hash join pour laquelle un seuil de déversement automatique sur disque est configuré avec [`max_bytes_before_external_join`](/fr/reference/settings/session-settings/max-bytes#max_bytes_before_external_join) ou [`max_bytes_ratio_before_external_join`](/fr/reference/settings/session-settings/max-bytes#max_bytes_ratio_before_external_join).

Une telle jointure ne peut garantir la préservation de l'ordre de la table de gauche que si elle ne déverse jamais de données sur disque, car ce déversement répartit les lignes dans des compartiments selon leur hachage. Lorsque l'optimisation s'applique, la jointure est donc maintenue en mémoire et le seuil de déversement ne se déclenche plus : la table de droite est alors limitée par le traqueur de mémoire, comme si aucun déversement automatique n'était configuré.

Définissez ce paramètre sur `0` pour conserver le comportement conservateur consistant à ne jamais propager la lecture dans l'ordre à travers une jointure susceptible de déverser des données sur disque. Les requêtes qui s'appuient sur ce déversement pour respecter la limite de mémoire et qui, sans cela, deviendraient éligibles à l'optimisation continuent de fonctionner comme auparavant.

L'optimisation distincte `ORDER BY ... LIMIT` via `JOIN`, qui pousse un `Sort` et un `Limit` vers le côté préservé de la jointure, ne dépend jamais de la préservation de l'ordre par la jointure et reste disponible pour les jointures pouvant déverser des données sur disque, indépendamment de ce paramètre. Elle s'efface toutefois au profit de la lecture dans l'ordre lorsque celle-ci est possible : ainsi, lorsque ce paramètre est activé, un `ORDER BY ... LIMIT` sur une jointure pouvant déverser des données sur disque, dont le côté préservé peut produire les lignes dans l'ordre demandé, utilise le plan de lecture dans l'ordre plutôt qu'un `Sort` et un `Limit` poussés vers le bas. Ce basculement conserve ses conditions préexistantes, notamment que [`query_plan_join_swap_table`](/fr/reference/settings/session-settings/query-plan#query_plan_join_swap_table) soit explicitement défini sur `false` : avec la valeur par défaut `auto`, une optimisation ultérieure peut échanger les côtés de la jointure et invalider le plan de lecture dans l'ordre ; le basculement n'est donc jamais effectué et ces requêtes conservent le `Sort` et le `Limit` poussés vers le bas.

<div id="query_plan_remove_redundant_distinct">
  ## query\_plan\_remove\_redundant\_distinct
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.2"},{"label": "1"},{"label": "Suppression de l’étape DISTINCT redondante dans le plan de requête"}]}]} />

Active ou désactive une optimisation du plan de requête qui supprime les étapes DISTINCT redondantes.
N’a d’effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs qu’à des fins de débogage. Ce paramètre pourra à l’avenir évoluer de façon non rétrocompatible ou être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_remove_redundant_sorting">
  ## query\_plan\_remove\_redundant\_sorting
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.1"},{"label": "1"},{"label": "Supprime les opérations de tri redondantes dans le plan de requête. Par exemple, les étapes de tri liées aux clauses ORDER BY dans les sous-requêtes"}]}]} />

Active ou désactive une optimisation au niveau du plan de requête qui supprime les étapes de tri redondantes, par exemple dans les sous-requêtes.
Ne prend effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) est défini sur 1.

<Note>
  Il s'agit d'un paramètre réservé aux experts qui ne doit être utilisé par les développeurs qu'à des fins de débogage. Ce paramètre peut évoluer ultérieurement de manière non rétrocompatible, voire être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_remove_unused_columns">
  ## query\_plan\_remove\_unused\_columns
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "Nouveau paramètre. Ajoute une optimisation pour supprimer les colonnes inutilisées dans le plan de requête de la requête."}]}]} />

Active ou désactive une optimisation au niveau du plan de requête de la requête, qui tente de supprimer les colonnes inutilisées (à l’entrée comme à la sortie) des étapes du plan.
N’a d’effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s’agit d’un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs qu’à des fins de débogage. Ce paramètre pourra, à l’avenir, être modifié de manière non rétrocompatible ou supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_reuse_storage_ordering_for_window_functions">
  ## query\_plan\_reuse\_storage\_ordering\_for\_window\_functions
</div>

**Aliases** : `optimize_read_in_window_order`

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.1"},{"label": "0"},{"label": "Désactive cette logique par défaut."}]}]} />

Active ou désactive une optimisation au niveau du plan de requête qui exploite l'ordre de tri du stockage lors du tri pour les fonctions de fenêtre.
Ne prend effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s'agit d'un paramètre réservé aux experts qui ne doit être utilisé par les développeurs qu'à des fins de débogage. Ce paramètre peut évoluer ultérieurement de façon non rétrocompatible, voire être supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_short_circuit_constant_false_join">
  ## query\_plan\_short\_circuit\_constant\_false\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "Nouveau paramètre permettant de court-circuiter un JOIN dont la condition ON est une constante false, afin de ne pas lire le côté qui ne contribue pas au résultat. previous_value=false permet à `compatibility` avec des versions antérieures à 26.8 de restaurer le comportement précédent (sans court-circuit)."}]}]} />

Court-circuite un `JOIN` dont la condition `ON` est réduite à une constante false en remplaçant par une source vide chaque côté d'entrée qui ne peut contribuer aucune ligne (les deux côtés pour `INNER`/`CROSS`/`SEMI`, le côté non préservé pour `LEFT`/`RIGHT`), afin de ne pas lire le côté qui ne contribue pas au résultat. S'applique à l'analyseur (`enable_analyzer = 1`) et aux plans non distribués.

<div id="query_plan_split_filter">
  ## query\_plan\_split\_filter
</div>

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

<Note>
  Il s’agit d’un paramètre réservé aux experts qui ne doit être utilisé par les développeurs que pour le débogage. Ce paramètre peut à l’avenir changer de manière non rétrocompatible ou être supprimé.
</Note>

Active ou désactive une optimisation au niveau du plan de requête qui décompose les filtres en expressions.
N’a d’effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_text_index_add_hint">
  ## query\_plan\_text\_index\_add\_hint
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "Nouveau paramètre"}]}]} />

Permet d'ajouter un hint (prédicat supplémentaire) pour le filtrage généré à partir de l'index de texte inversé dans le plan de requête.

<div id="query_plan_top_k_through_join">
  ## query\_plan\_top\_k\_through\_join
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "Nouveau paramètre permettant d’activer une optimisation au niveau du plan de requête, qui propage ORDER BY ... LIMIT n à travers une jointure LEFT\/RIGHT lorsque la clé de tri ne référence que le côté préservé."}]}]} />

Active ou désactive une optimisation au niveau du plan de requête qui propage `ORDER BY ... LIMIT n` à travers une jointure lorsque la clé de tri ne référence que des colonnes du côté préservé par la jointure (LEFT/RIGHT). Elle limite le nombre de lignes que l’entrée du côté préservé doit produire avant la jointure.
Ne prend effet que si le paramètre [query\_plan\_enable\_optimizations](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer

<div id="query_plan_try_use_vector_search">
  ## query\_plan\_try\_use\_vector\_search
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "1"},{"label": "Nouveau paramètre."}]}]} />

Active ou désactive une optimisation au niveau du plan de requête visant à utiliser l'index de similarité vectorielle.
Ne prend effet que si le paramètre [`query_plan_enable_optimizations`](/fr/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) vaut 1.

<Note>
  Il s'agit d'un paramètre réservé aux experts, qui ne doit être utilisé par les développeurs que pour le débogage. Ce paramètre peut être modifié ultérieurement de manière non rétrocompatible, voire supprimé.
</Note>

Valeurs possibles :

* 0 - Désactiver
* 1 - Activer
