Per gran parte della sua storia Snowflake non ha avuto indici sulle tabelle normali. Si è affidato invece alle micro-partizioni: piccoli blocchi di una tabella per cui è registrato il valore minimo e massimo di ogni colonna, così una query può saltare i blocchi che non possono contenere le righe cercate. Funziona benissimo per le grandi query analitiche, meno quando servono poche righe per ID cliente. Il 26 ottobre 2026 gli indici secondari sono diventati generalmente disponibili per le tabelle standard. Questa guida spiega cosa sono, come crearne uno e quando vale la pena pagarli.
Come funziona un indice secondario
Un indice secondario associa i valori delle sue colonne chiave alle micro-partizioni che li contengono. Quando una query filtra su quelle colonne, Snowflake cerca nell'indice le partizioni corrispondenti e legge solo quelle. Se tutte le colonne di cui la query ha bisogno sono nell'indice, Snowflake può rispondere usando solo l'indice. Snowflake costruisce e aggiorna l'indice automaticamente quando i dati cambiano.
Crea il tuo primo indice
La sintassi ti sembrerà familiare se hai usato PostgreSQL o SQL Server. Prima vengono le colonne chiave, in ordine di importanza, e INCLUDE aggiunge colonne extra salvate nell'indice ma non usate come chiave di ricerca 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;Le chiavi possono essere anche espressioni deterministiche, come un cast o la versione in minuscolo di una colonna. Scrivi i filtri con la stessa espressione, così l'ottimizzatore può riconoscerla:
CREATE INDEX idx_customers_email ON customers (LOWER(email));
SELECT customer_id, name
FROM customers
WHERE LOWER(email) = 'ana@example.com';- Espressioni chiave
- Una lista ordinata di colonne o espressioni deterministiche. Metti per prima la colonna su cui filtri di più, perché le prime chiavi fanno un pruning più efficace.
- INCLUDE
- Colonne extra salvate nell'indice. Aiutano meno nel filtrare, ma permettono all'indice di restituire risultati da solo.
- Indice di copertura
- Un indice che contiene tutte le colonne di cui una query ha bisogno, così la tabella di base non viene letta.
- Modificare un indice
- Non esiste ALTER INDEX. Usa CREATE OR REPLACE INDEX, oppure eliminalo e ricrealo.
Indice, search optimization o clustering?
Ora Snowflake ha tre modi per rendere più veloci i filtri. Si sovrappongono, quindi conviene sapere a cosa serve ciascuno.
| Indice secondario | Search optimization | Clustering automatico | |
|---|---|---|---|
| Ideale per | Uguaglianze, intervalli e liste IN | Uguaglianze su colonne ad alta cardinalità, ricerche testuali e geospaziali | Intervalli sulle colonne con cui è ordinata la tabella |
| Chiavi | Colonne ed espressioni deterministiche | Colonne | Colonne ed espressioni |
| Risponde senza leggere la tabella | Sì, se copre la query | No | È la tabella stessa a essere riorganizzata |
| Fatturato come | Search optimization | Search optimization | Clustering automatico |
- 1
Parti dal clustering per il percorso principale
Se quasi ogni query filtra per data, fai il clustering della tabella per data. Una sola chiave di clustering serve lo schema più comune.
- 2
Aggiungi un indice per il secondo percorso
Quando un'app, un'API o un agente AI cerca righe anche per ID cliente, ordine o dispositivo, un indice su quella colonna evita di riorganizzare tutta la tabella.
- 3
Usa la search optimization per testo e tante colonne
Ricerche di sottostringhe, filtri geospaziali e filtri di uguaglianza ad hoc su molte colonne restano il suo compito.
- 4
Prova con query reali
Confronta tempo trascorso e partizioni lette nel query profile prima e dopo, e tieni l'indice solo se si ripaga.
I limiti da conoscere prima di iniziare
Funziona con
Supportato- Tabelle Snowflake standard, con più indici per tabella
- Filtri di uguaglianza, disuguaglianza, intervallo e liste IN
- Espressioni scalari deterministiche, cast compresi
Pensato per ricerche selettive su tabelle grandi.
Non funziona con
Non supportato- Tabelle Apache Iceberg, viste e viste materializzate
- Query che usano il Time Travel
- Tabelle o colonne con policy di accesso alle righe, mascheramento, aggregazione o privacy
- Replica, per ora
L'ottimizzatore usa al massimo un indice per tabella in una query, e può anche ignorarlo.
Costi e permessi
Per creare un indice servono la OWNERSHIP della tabella e il privilegio ADD SEARCH OPTIMIZATION sul suo schema. Solo il ruolo proprietario della tabella può eliminarlo. I crediti di manutenzione compaiono nella cronologia della search optimization, dove gli indici secondari hanno un'etichetta propria:
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;Le tabelle che cambiano di continuo costano di più da indicizzare, perché ogni modifica va riportata nell'indice. Gli indici rendono di più su tabelle grandi, lette spesso da query selettive e aggiornate a lotti.
Verifica cosa hai capito
1/3Cosa aggiunge INCLUDE a un indice secondario di Snowflake?
Le colonne incluse rendono l'indice "di copertura", così la tabella di base può non essere letta.
2/3Quale tipo di tabella non può avere un indice secondario?
Tabelle Iceberg, viste e viste materializzate non sono supportate.
3/3Come viene fatturata la manutenzione degli indici?
Cerca il tipo Secondary Index nella cronologia della search optimization per seguire i costi.
Hai risposto correttamente a 0 domande su 3.
Altro su Snowflake: l'aggiornamento di Snowflake di ottobre 2026, le novità delle piattaforme dati di questa settimana, il cheat sheet di Snowflake e Snowflake contro Databricks per gli agenti AI. Nuovo su Snowflake? Inizia da Primi passi con Snowflake.
Fonti: la nota di rilascio di Snowflake "Secondary indexes (General availability)" (26 ottobre 2026) e la documentazione di Snowflake su indici secondari, CREATE INDEX e search optimization. Le funzioni arrivano per regione ed edizione; verifica la disponibilità nel tuo account.
