Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

paramètres de session optimize_trivial_*

Ces paramètres sont disponibles dans system.settings et sont générés automatiquement à partir du code source.

optimize_trivial_approximate_count_query

Type
Bool
Par défaut
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.

optimize_trivial_count_query

Type
Bool
Par défaut
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_trivial_count_with_sparsity_filter

Fonctionnalité en bêta
Type
Bool
Par défaut
1
Historique des versions
VersionValeur par défautCommentaire
26.81Passage en BÊTA et activation par défaut : traiter `SELECT count() FROM t WHERE <pred>` à partir des compteurs persistants `num_defaults` / `num_rows` par colonne lorsque `<pred>` répartit les lignes entre valeurs par défaut et valeurs non par défaut. Nécessite le paramètre MergeTree `compute_exact_num_defaults_for_sparse_columns` (désormais également activé par défaut).
26.70Nouveau 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 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_group_by_limit_query

Type
Bool
Par défaut
1
Historique des versions
VersionValeur par défautCommentaire
26.51Nouveau 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, fonctions de fenêtre ni arrayJoin dans la projection, sans clauses HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/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.

optimize_trivial_insert_select

Type
Bool
Par défaut
0
Historique des versions
VersionValeur par défautCommentaire
24.70L’optimisation n’a pas de sens dans bien des cas.

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

optimize_trivial_view_pushdown_to_distributed

Type
Bool
Par défaut
1
Historique des versions
VersionValeur par défautCommentaire
26.81Nouveau paramètre permettant de transmettre l’intégralité de la requête externe aux segments pour les vues triviales sur des tables Distributed.

Lorsqu’elle est activée, pour les vues sur des tables Distributed dont la liste SELECT ne contient que des références à des colonnes, *, ou des expressions (mais aucune fonction fenêtre ni sous-requête scalaire), et qui ne comportent ni agrégation, ni regroupement, ni tri, ni jointure, l’intégralité de la requête externe est transmise à chaque segment. Cela permet à chaque segment d’appliquer localement les filtres et les expressions de la vue, réduisant ainsi la quantité de données transférées sur le réseau.

Valeurs possibles :

  • 0 — L’optimisation est désactivée ; les vues sur des tables Distributed sont toujours exécutées sur le coordinateur.
  • 1 — L’optimisation est activée.
Navigation