- minmax : suit la valeur minimale et maximale d’une expression par bloc. Idéal pour les requêtes par plage sur des données faiblement triées.
- set(N) : suit un ensemble de valeurs jusqu’à une taille spécifiée N pour chaque bloc. Efficace sur les colonnes à faible cardinalité par bloc.
- text : construit un index inversé sur des données textuelles tokenisées, permettant une recherche en texte intégral efficace et déterministe. Recommandé pour les colonnes contenant du langage naturel ou de grands textes libres, lorsqu’une recherche précise de tokens et une recherche évolutive sur plusieurs termes sont requises, plutôt que des approches approximatives basées sur un filtre de Bloom.
- bloom_filter : détermine de manière probabiliste si une valeur existe dans un bloc, ce qui permet un filtrage approximatif rapide pour l’appartenance à un ensemble. Efficace pour optimiser les requêtes cherchant « une aiguille dans une botte de foin », lorsqu’une correspondance positive est nécessaire.
- tokenbf_v1 / ngrambf_v1 : (Obsolète) Variantes spécialisées de filtre de Bloom conçues pour rechercher des tokens ou des séquences de caractères dans des chaînes — particulièrement utiles pour les données de logs ou les cas d’usage de recherche textuelle. Obsolète dans les versions de ClickHouse >= 26.2 au profit des index textuels.
- Les colonnes à forte cardinalité globale mais à faible cardinalité au sein d’un bloc.
- Les valeurs rares qui sont critiques pour la recherche (p. ex. codes d’erreur, ID spécifiques).
- Les cas où le filtrage porte sur des colonnes hors clé primaire avec une distribution localisée.
- Testez les indices de saut sur des données réelles avec des requêtes réalistes. Essayez différents types d’index et différentes valeurs de granularité.
- Évaluez leur impact à l’aide d’outils comme send_logs_level=‘trace’ et
EXPLAIN indexes=1pour visualiser l’efficacité de l’index. - Évaluez toujours la taille d’un index et la manière dont elle est affectée par la granularité. Réduire la granularité améliore souvent les performances jusqu’à un certain point, en permettant de filtrer davantage de granules et de réduire le volume à analyser. Toutefois, à mesure que la taille de l’index augmente avec une granularité plus faible, les performances peuvent aussi se dégrader. Mesurez les performances et la taille de l’index pour différentes valeurs de granularité. Cela est particulièrement pertinent pour les index de filtre de Bloom.
Exemple
EXPLAIN indexes = 1 suivante :
ViewCount est corrélé à CreationDate (une clé primaire), comme on pourrait s’y attendre — plus un post existe depuis longtemps, plus il a eu l’occasion d’être consulté.
ALTER TABLE suivantes — nous l’ajoutons d’abord, puis nous le “matérialisons”.
ViewCount pour chaque bloc de lignes (granule) de la table :
En répétant la requête précédente, on observe de nettes améliorations des performances. Remarquez la diminution du nombre de lignes analysées :
EXPLAIN indexes = 1 permet de confirmer l’utilisation de l’index.
ViewCount > 10,000,000 dans notre requête d’exemple :