Skip to main content
Cette page rassemble des exemples d’index de saut de données ClickHouse et montre comment déclarer chaque type, quand l’utiliser et comment vérifier qu’il est bien pris en compte. Toutes ces fonctionnalités sont compatibles avec les tables de la famille MergeTree. Syntaxe de l’index :
ClickHouse prend en charge six types de skip index : Chaque section fournit des exemples avec un jeu de données d’exemple et montre comment vérifier l’utilisation des index lors de l’exécution des requêtes.

MinMax index

L’index minmax convient le mieux aux prédicats de plage sur des données peu triées ou sur des colonnes corrélées à ORDER BY.
Consultez un exemple concret avec EXPLAIN et l’élagage.

Index set

Utilisez l’index set lorsque la cardinalité locale (par bloc) est faible ; il n’est pas utile si chaque bloc contient de nombreuses valeurs distinctes.
Un processus de création/matérialisation, ainsi que l’effet avant/après, sont présentés dans le guide de fonctionnement de base. text est un index inversé sur des données textuelles tokenisées. Conçu spécifiquement pour les charges de travail de recherche en texte intégral, il permet une recherche de tokens et de termes efficace et déterministe. Recommandé pour les cas d’usage de traitement du langage naturel ou de recherche textuelle à grande échelle. Consultez Recherche en texte intégral avec les index de texte pour plus de détails et d’exemples.
Consultez ici la documentation d’un exemple d’observabilité plus complet. L’index de texte est entièrement déterministe et offre un réglage fin de la tokenisation et du traitement du texte, au prix d’une consommation de stockage légèrement supérieure à celle des index basés sur des bloom filters,

Filtre de Bloom générique (scalaire)

L’index bloom_filter est bien adapté aux recherches d’égalité et d’appartenance IN de type “aiguille dans une botte de foin”. Il accepte un paramètre facultatif correspondant au taux de faux positifs (par défaut : 0.025).
L’utilisation des index ngrambf_v1 pour la recherche en texte intégral est dépréciée dans les versions de ClickHouse >= 26.2 au profit des index text (voir ici pour plus de détails).
L’index ngrambf_v1 découpe les chaînes en n-grammes. Il fonctionne bien pour les requêtes LIKE '%...%'. Il prend en charge String/FixedString/Map (via mapKeys/mapValues), ainsi qu’une taille, un nombre de fonctions de hachage et une graine configurables. Consultez la documentation sur le filtre de Bloom à n-grammes pour plus de détails.
Ce guide présente des exemples concrets et indique quand utiliser token ou ngram. Aides à l’optimisation des paramètres : Les quatre paramètres de ngrambf_v1 (taille du n-gram, taille du bitmap, fonctions de hachage, seed) ont un impact important sur les performances et l’utilisation de la mémoire. Utilisez ces fonctions pour calculer la taille optimale du bitmap et le nombre de fonctions de hachage en fonction du volume de n-grams attendu et du taux de faux positifs souhaité :
Consultez la documentation des paramètres pour obtenir des recommandations complètes sur le réglage.
L’utilisation des index tokenbf_v1 pour la recherche en texte intégral est dépréciée dans les versions de ClickHouse >= 26.2, au profit des index text (voir ici pour plus de détails).
Les index tokenbf_v1 indexent les tokens séparés par des caractères non alphanumériques. Ils doivent être utilisés avec hasToken, des motifs de mots LIKE ou equals/IN. Ils prennent en charge les types String/FixedString/Map. Consultez les pages Token bloom filter et Bloom filter types pour plus de détails.
Voir des exemples d’observabilité et des conseils sur token vs ngram ici.

Ajouter des index au moment du CREATE TABLE (plusieurs exemples)

Les index de saut de données prennent également en charge les expressions composites ainsi que les types Map/Tuple/Nested. Cela est illustré dans l’exemple ci-dessous :

Matérialisation sur les données existantes et vérification

Vous pouvez ajouter un index aux parts de données existantes avec MATERIALIZE, puis examiner l’élagage à l’aide de EXPLAIN ou des logs de trace, comme ci-dessous :
Cet exemple pratique de minmax montre la structure de la sortie EXPLAIN et le nombre d’éléments élagués.

Quand utiliser et quand éviter les index de saut

Utilisez les index de saut lorsque :
  • Les valeurs de filtre sont éparses dans les blocs de données
  • Il existe une forte corrélation avec les colonnes ORDER BY, ou les schémas d’ingestion des données regroupent des valeurs similaires
  • Vous effectuez des recherches textuelles dans de grands jeux de logs (types ngrambf_v1/tokenbf_v1)
Évitez les index de saut lorsque :
  • La plupart des blocs contiennent probablement au moins une valeur correspondante (les blocs seront alors lus de toute façon)
  • Vous filtrez sur des colonnes à forte cardinalité sans corrélation avec l’ordre des données
Points importantsSi une valeur apparaît ne serait-ce qu’une seule fois dans un bloc de données, ClickHouse doit lire l’intégralité du bloc. Testez les index sur des jeux de données réalistes et ajustez la granularité ainsi que les paramètres propres au type en fonction de mesures de performances réelles.

Ignorer temporairement des index ou en imposer l’utilisation

Désactivez des index spécifiques par leur nom pour des requêtes individuelles lors des tests et du dépannage. Il existe également des paramètres permettant d’imposer l’utilisation des index si nécessaire. Voir ignore_data_skipping_indices.

Notes et limites

  • Les index de saut ne sont pris en charge que sur les tables de la famille MergeTree ; l’élagage s’effectue au niveau des granules/blocs.
  • Les index basés sur des filtres de Bloom sont probabilistes (les faux positifs entraînent des lectures supplémentaires, mais n’excluent pas de données valides).
  • Les filtres de Bloom et les autres index de saut doivent être validés à l’aide de EXPLAIN et du traçage ; ajustez la granularité pour trouver un équilibre entre l’élagage et la taille de l’index.
Dernière modification le 3 juillet 2026