> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentation sur la manipulation des index de saut de données

# Manipulation des index de saut de données

Les opérations suivantes sont disponibles :

<div id="add-index">
  ## ADD INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] ADD INDEX [IF NOT EXISTS] name expression TYPE type [GRANULARITY value] [FIRST|AFTER name]` - Ajoute la description d’un index aux métadonnées des tables.

<div id="drop-index">
  ## DROP INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] DROP INDEX [IF EXISTS] name` - Supprime la description de l’index des métadonnées de la table et supprime les fichiers d’index du disque. Implémenté sous la forme d’une [mutation](/fr/reference/statements/alter/index#mutations).

<div id="materialize-index">
  ## MATERIALIZE INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] MATERIALIZE INDEX [IF EXISTS] name [IN PARTITION partition_name]` - Reconstruit l'index secondaire `name` pour le `partition_name` indiqué. Cette opération est implémentée sous forme de [mutation](/fr/reference/statements/alter/index#mutations). Si la clause `IN PARTITION` est omise, l'index est reconstruit pour l'ensemble des données de la table.

[`MATERIALIZE COLUMN`](/fr/reference/statements/alter/column#materialize-column) ne remplace pas entièrement `MATERIALIZE INDEX`. Sur les parties à la fois **wide + full-storage**, cette commande peut réécrire les valeurs de colonnes sans actualiser les fichiers autonomes des index de saut (ou des index de texte). Les index de saut classiques stockés dans `skp_idx.packed` font exception : ils peuvent tout de même être recalculés de force sur les parties wide + full-storage (pour les petits sous-flux d'index de saut inférieurs à la valeur par défaut de [`packed_skip_index_max_bytes`](/fr/reference/settings/merge-tree-settings/other#packed_skip_index_max_bytes) ; les index de texte intégral ne sont pas empaquetés de cette manière). Sur **toute partie autre que wide + full-storage** (notamment **compact + full**, **compact + packed** et **wide + packed**), une réécriture complète de la partie peut recalculer les index existants — les petites parties sont généralement compactes tout en utilisant, par défaut, le stockage de partie full. Utilisez `MATERIALIZE INDEX` pour une approche **déterministe et immédiate** lorsqu'un index a été ajouté à une table contenant déjà des données (`ADD INDEX` uniquement dans les métadonnées), ainsi qu'après des réécritures de colonnes sur des parties wide+full-storage lorsque vous devez reconstruire immédiatement les fichiers d'index autonomes. Les index nouvellement ajoutés (y compris les index de texte) sur des parties historiques peuvent également être matérialisés lors d'une fusion ultérieure si [`materialize_skip_indexes_on_merge`](/fr/reference/settings/merge-tree-settings/materialize#materialize_skip_indexes_on_merge) est activé et que l'index n'est pas exclu via [`exclude_materialize_skip_indexes_on_merge`](/fr/reference/settings/merge-tree-settings/exclude#exclude_materialize_skip_indexes_on_merge) ; sinon, ils restent non matérialisés jusqu'à l'exécution explicite de `MATERIALIZE INDEX`.

<div id="clear-index">
  ## CLEAR INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] CLEAR INDEX [IF EXISTS] name [IN PARTITION partition_name]` - Supprime les fichiers d’index secondaires du disque sans en supprimer la définition. Implémenté sous forme de [mutation](/fr/reference/statements/alter/index#mutations).

Les commandes `ADD`, `DROP` et `CLEAR` sont légères, au sens où elles ne modifient que les métadonnées ou suppriment des fichiers.
De plus, elles sont répliquées, les métadonnées des index étant synchronisées via ClickHouse Keeper ou ZooKeeper.

<Note>
  La manipulation des index n’est prise en charge que pour les tables utilisant le moteur [`*MergeTree`](/fr/reference/engines/table-engines/mergetree-family/mergetree) (y compris les variantes [répliquées](/fr/reference/engines/table-engines/mergetree-family/replication)).
</Note>

<div id="concurrent-alter-and-multi-clause-materialize-index">
  ## `ALTER` simultanés et `MATERIALIZE INDEX` à plusieurs clauses
</div>

Sur les tables répliquées, plusieurs `ALTER` distincts exécutés rapidement sur une même table peuvent déclencher `CANNOT_ASSIGN_ALTER` (code 517) lorsque les `ALTER` précédents n'ont pas encore été appliqués sur la réplique (les métadonnées sont encore en retard — cela peut rester le cas après qu'un `ALTER` antérieur a déjà été affecté). Il s'agit d'une condition générale liée à des `ALTER` simultanés sur les métadonnées ou à des mutations (et pas uniquement aux mutations) ; sérialisez les opérations ou réessayez, attendez les `ALTER` antérieurs générant des mutations via [`mutations_sync`](/fr/reference/settings/session-settings/mutations#mutations_sync) / `is_done` dans [`system.mutations`](/fr/reference/system-tables/mutations), ou combinez des opérations de métadonnées indépendantes dans un seul `ALTER` à plusieurs clauses lorsque la grammaire le permet. Consultez [Synchronicité des requêtes ALTER](/fr/reference/statements/alter/index#synchronicity-of-alter-queries) et [Attribution simultanée d'ALTER](/fr/reference/statements/alter/index#concurrent-alter-assignment-on-one-table).

Plusieurs clauses `MATERIALIZE INDEX` peuvent figurer dans un même `ALTER`. Le cas couvert dans l'arbre source consiste à regrouper plusieurs clauses `ADD INDEX` et `MATERIALIZE INDEX` pour ces mêmes nouveaux index dans une seule instruction (`tests/queries/0_stateless/02911_add_index_and_materialize_index.sql`). Cette forme groupée est destinée aux bases de données ordinaires (non-`DatabaseReplicated`) — `DatabaseReplicated` rejette les segments mixtes `ADD INDEX` + `MATERIALIZE INDEX` avec `QUERY_IS_PROHIBITED`. Les formes à plusieurs clauses contenant uniquement `MATERIALIZE INDEX` sur des index existants suivent le même chemin de préparation de l'instantané des métadonnées dans l'implémentation actuelle, mais cette forme précise n'est pas encore couverte par un test stateless ciblé ; considérez-la comme un comportement de l'implémentation actuelle plutôt que comme un contrat garanti distinctement, jusqu'à ce qu'une telle couverture existe. Pour une application ordonnée, exécutez un `MATERIALIZE INDEX` par instruction et attendez avec [`mutations_sync`](/fr/reference/settings/session-settings/mutations#mutations_sync).
