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.
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.
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.
-- 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 :
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 secondaire | Search optimization | Clustering automatique | |
|---|---|---|---|
| Idéal pour | Égalités, plages et listes IN | Égalités sur des colonnes à forte cardinalité, recherches textuelles et géospatiales | Plages sur les colonnes selon lesquelles la table est triée |
| Clés | Colonnes et expressions déterministes | Colonnes | Colonnes et expressions |
| Répond sans lire la table | Oui, s'il couvre la requête | Non | C'est la table elle-même qui est réorganisée |
| Facturé comme | Search optimization | Search optimization | Clustering automatique |
- 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
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
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
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é :
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 ?
Les colonnes incluses rendent l'index « couvrant » : la table de base peut ne pas être lue.
2/3Quel type de table ne peut pas avoir d'index secondaire ?
Les tables Iceberg, les vues et les vues matérialisées ne sont pas prises en charge.
3/3Comment la maintenance des index est-elle facturée ?
Cherchez le type Secondary Index dans l'historique de la search optimization pour suivre le coût.
Vous avez 0 bonne(s) réponse(s) sur 3.
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.
