Comment fonctionne l’index primaire clairsemé dans ClickHouse ?
Dans ClickHouse, l’index primaire clairsemé permet d’identifier efficacement les granules — des blocs de lignes — susceptibles de contenir des données correspondant à la condition d’une requête sur les colonnes de clé primaire de la table. Dans la section suivante, nous expliquons comment cet index est construit à partir des valeurs de ces colonnes.
Création de l’index primaire clairsemé
Lors du traitement, les données de chaque colonne sont ④ logiquement divisées en granules — chacune couvrant 8 192 lignes — qui constituent les plus petites unités de travail des mécanismes de traitement des données de ClickHouse. Cette structure en granules est aussi ce qui rend l’index primaire sparse : au lieu d’indexer chaque ligne, ClickHouse stocke ⑤ les valeurs de la clé primaire d’une seule ligne par granule — plus précisément, la première ligne. On obtient ainsi une entrée d’index par granule :
Grâce à sa nature sparse, l’index primaire est suffisamment compact pour tenir entièrement en mémoire, ce qui permet un filtrage rapide des requêtes comportant des prédicats sur les colonnes de la clé primaire. Dans la section suivante, nous montrons comment il contribue à accélérer ces requêtes.
Nous montrons brièvement comment l’index primaire clairsemé est utilisé pour accélérer les requêtes à l’aide d’une autre animation :
① La requête d’exemple inclut un prédicat sur les deux colonnes de la clé primaire :
town = 'LONDON' AND street = 'OXFORD STREET'.
② Pour accélérer la requête, ClickHouse charge en mémoire l’index primaire de la table.
③ Il parcourt ensuite les entrées de l’index pour identifier les granules susceptibles de contenir des lignes correspondant au prédicat — autrement dit, les granules qui ne peuvent pas être ignorées.
④ Ces granules potentiellement pertinentes sont ensuite chargées et traitées en mémoire, avec les granules correspondantes de toute autre colonne requise pour la requête.
Suivi des index primaires
Points clés à retenir
- Les index primaires clairsemés aident ClickHouse à ignorer les données inutiles en identifiant les granules susceptibles de contenir des lignes correspondant aux conditions de requête sur les colonnes de clé primaire.
- Chaque index stocke uniquement les valeurs de clé primaire de la première ligne de chaque granule (une granule contient 8 192 lignes par défaut), ce qui le rend suffisamment compact pour tenir en mémoire.
- Chaque partie de données d’une table MergeTree possède son propre index primaire, utilisé indépendamment lors de l’exécution des requêtes.
- Lors des requêtes, l’index permet à ClickHouse d’ignorer des granules, ce qui réduit les E/S et l’utilisation de la mémoire tout en améliorant les performances.
-
Vous pouvez inspecter le contenu de l’index à l’aide de la fonction de table
mergeTreeIndexet surveiller l’utilisation de l’index avec la clauseEXPLAIN.