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
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.
EXPLAIN et l’élagage.
Index set
set lorsque la cardinalité locale (par bloc) est faible ; il n’est pas utile si chaque bloc contient de nombreuses valeurs distinctes.
Index de texte (text) pour la recherche en texte intégral
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.
Filtre de Bloom générique (scalaire)
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).
Filtre de Bloom à n-grammes (ngrambf_v1) pour la recherche de sous-chaînes (Déprécié)
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).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.
Filtre Bloom de tokens (tokenbf_v1) pour la recherche par mots (Déprécié)
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).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.
token vs ngram ici.
Ajouter des index au moment du CREATE TABLE (plusieurs exemples)
Map/Tuple/Nested. Cela est illustré dans l’exemple ci-dessous :
Matérialisation sur les données existantes et vérification
MATERIALIZE, puis examiner l’élagage à l’aide de EXPLAIN ou des logs de trace, comme ci-dessous :
Quand utiliser et quand éviter les index de saut
- 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)
- 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
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
EXPLAINet du traçage ; ajustez la granularité pour trouver un équilibre entre l’élagage et la taille de l’index.