Apprendre  /  Guides

Les index secondaires de Snowflake expliqués : CREATE INDEX, index couvrants et quand les utiliser

Pour la première fois, les tables standard de Snowflake peuvent avoir des index. Ce qu'ils font, comment en créer un et quand ils battent le clustering et la search optimization.

Guide8 min de lectureMis à jour le 28 octobre 2026
SnowflakeSQLBases de données
Tous les guides et antisèches

Pendant presque toute son histoire, Snowflake n'a pas eu d'index sur les tables ordinaires. Il s'appuyait sur les micro-partitions : de petits blocs de table pour lesquels la valeur minimale et maximale de chaque colonne est enregistrée, afin qu'une requête saute les blocs qui ne peuvent pas contenir les lignes cherchées. C'est excellent pour les grosses requêtes analytiques, moins quand on veut quelques lignes par identifiant client. Le 26 octobre 2026, les index secondaires sont passés en disponibilité générale pour les tables standard. Ce guide explique ce qu'ils sont, comment en créer un et quand ils valent leur coût.

GADisponibilité généraledepuis le 26 octobre 2026
1Index par table et par scanles index ne sont jamais combinés
3Façons d'accélérer les filtresindex, search optimization, clustering

Comment fonctionne un index secondaire

Un index secondaire relie les valeurs de ses colonnes clés aux micro-partitions qui les contiennent. Quand une requête filtre sur ces colonnes, Snowflake trouve les partitions concernées dans l'index et ne lit qu'elles. Si toutes les colonnes nécessaires à la requête sont dans l'index, Snowflake peut répondre à partir de l'index seul. Snowflake construit et met à jour l'index automatiquement quand les données changent.

Une recherche avec un index secondaire
RequêteWHERE customer_id = 42
Recherche dans l'indextrouve les valeurs correspondantes
Élagagegarde seulement les partitions concernées
Réponsedepuis l'index, ou un petit scan

Créer votre premier index

La syntaxe vous semblera familière si vous avez utilisé PostgreSQL ou SQL Server. Les colonnes clés viennent d'abord, par ordre d'importance, et INCLUDE ajoute des colonnes stockées dans l'index mais pas utilisées comme clé de recherche principale.

SQL
-- Speed up lookups by customer and date, and cover the columns the app reads
CREATE INDEX idx_orders_customer
  ON orders (customer_id, order_date)
  INCLUDE (status, amount);

-- Queries like this can now skip most of the table
SELECT order_date, status, amount
FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-10-01';

-- List and remove indexes
SHOW INDEXES IN TABLE orders;
DROP INDEX orders.idx_orders_customer;

Les clés peuvent aussi être des expressions déterministes, comme un cast ou la version en minuscules d'une colonne. Écrivez vos filtres avec la même expression pour que l'optimiseur la reconnaisse :

SQL
CREATE INDEX idx_customers_email ON customers (LOWER(email));

SELECT customer_id, name
FROM customers
WHERE LOWER(email) = 'ana@example.com';
Expressions clés
Une liste ordonnée de colonnes ou d'expressions déterministes. Placez en premier la colonne la plus filtrée, car les premières clés élaguent plus efficacement.
INCLUDE
Des colonnes supplémentaires stockées dans l'index. Elles aident moins au filtrage, mais permettent à l'index de renvoyer seul les résultats.
Index couvrant
Un index qui contient toutes les colonnes dont une requête a besoin, si bien que la table de base n'est pas lue.
Modifier un index
Il n'y a pas d'ALTER INDEX. Utilisez CREATE OR REPLACE INDEX, ou supprimez puis recréez l'index.

Index, search optimization ou clustering ?

Snowflake propose désormais trois façons d'accélérer les filtres. Elles se recoupent, alors il est utile de savoir à quoi sert chacune.

Index secondaireSearch optimizationClustering automatique
Idéal pourÉgalités, plages et listes INÉgalités sur des colonnes à forte cardinalité, recherches textuelles et géospatialesPlages sur les colonnes selon lesquelles la table est triée
ClésColonnes et expressions déterministesColonnesColonnes et expressions
Répond sans lire la tableOui, s'il couvre la requêteNonC'est la table elle-même qui est réorganisée
Facturé commeSearch optimizationSearch optimizationClustering automatique
  1. 1

    Commencez par le clustering pour l'accès principal

    Si presque toutes les requêtes filtrent par date, clusterisez la table par date. Une seule clé de clustering sert le cas le plus courant.

  2. 2

    Ajoutez un index pour le deuxième accès

    Quand une application, une API ou un agent IA cherche aussi des lignes par identifiant client, commande ou appareil, un index sur cette colonne évite de réorganiser toute la table.

  3. 3

    Gardez la search optimization pour le texte et les nombreuses colonnes

    Recherches de sous-chaînes, filtres géospatiaux et filtres d'égalité ponctuels sur beaucoup de colonnes restent son domaine.

  4. 4

    Testez avec de vraies requêtes

    Comparez le temps écoulé et les partitions lues dans le query profile avant et après, et ne gardez l'index que s'il est rentable.

Les limites à connaître avant de commencer

Fonctionne avec

Pris en charge
  • Les tables Snowflake standard, avec plusieurs index par table
  • Les filtres d'égalité, d'inégalité, de plage et les listes IN
  • Les expressions scalaires déterministes, y compris les casts

Conçu pour les recherches sélectives sur de grandes tables.

Ne fonctionne pas avec

Non pris en charge
  • Les tables Apache Iceberg, les vues et les vues matérialisées
  • Les requêtes qui utilisent le Time Travel
  • Les tables ou colonnes avec des politiques d'accès aux lignes, de masquage, d'agrégation ou de confidentialité
  • La réplication, pour l'instant

L'optimiseur utilise au plus un index par table dans une requête, et peut aussi l'ignorer.

Coûts et droits

Pour créer un index, il faut la OWNERSHIP de la table et le privilège ADD SEARCH OPTIMIZATION sur son schéma. Seul le rôle propriétaire de la table peut le supprimer. Les crédits de maintenance apparaissent dans l'historique de la search optimization, où les index secondaires ont leur propre libellé :

SQL
GRANT ADD SEARCH OPTIMIZATION ON SCHEMA sales.public TO ROLE app_owner;

-- Credits spent maintaining secondary indexes in the last 30 days
SELECT table_name, SUM(credits_used) AS credits
FROM snowflake.account_usage.search_optimization_history
WHERE index_type = 'Secondary Index'
  AND start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
GROUP BY table_name
ORDER BY credits DESC;

Les tables qui changent sans arrêt coûtent plus cher à indexer, car chaque modification doit être répercutée dans l'index. Les index sont les plus rentables sur de grandes tables, souvent lues par des requêtes sélectives et mises à jour par lots.

Testez vos connaissances

1/3Qu'apporte INCLUDE à un index secondaire Snowflake ?

2/3Quel type de table ne peut pas avoir d'index secondaire ?

3/3Comment la maintenance des index est-elle facturée ?

Plus sur Snowflake : la mise à jour Snowflake d'octobre 2026, l'actualité des plateformes data de la semaine, l'aide-mémoire Snowflake et Snowflake ou Databricks pour les agents IA. Vous débutez sur Snowflake ? Commencez par Premiers pas avec Snowflake.

Sources : la note de version Snowflake « Secondary indexes (General availability) » (26 octobre 2026) et la documentation Snowflake sur les index secondaires, CREATE INDEX et la search optimization. Les fonctions sont déployées par région et par édition ; vérifiez la disponibilité dans votre compte.

Alessandro Ecclesie AgazziÉcrit par Alessandro Ecclesie Agazzi, analytics engineer à Londres. Mis à jour le 28 octobre 2026. À propos

Cet article vous a été utile ?

De nouveaux guides et décryptages des nouveautés en data et en IA paraissent ici régulièrement. Suivez-moi sur LinkedIn ou partagez cet article avec un collègue.