Impara  /  Guide

Gli indici secondari di Snowflake spiegati: CREATE INDEX, indici di copertura e quando usarli

Per la prima volta le tabelle standard di Snowflake possono avere indici. Cosa fanno, come crearne uno e quando battono clustering e search optimization.

Guida8 min di letturaAggiornato il 28 ottobre 2026
SnowflakeSQLDatabase
Tutte le guide e i cheat sheet

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.

GAGeneralmente disponibiledal 26 ottobre 2026
1Indice per tabella in una scansionegli indici non vengono mai combinati
3Modi per velocizzare i filtriindici, search optimization, clustering

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.

Una ricerca con un indice secondario
QueryWHERE customer_id = 42
Ricerca nell'indicetrova i valori corrispondenti
Pruningtiene solo le partizioni che li contengono
Rispostadall'indice o da una piccola scansione

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.

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;

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:

SQL
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 secondarioSearch optimizationClustering automatico
Ideale perUguaglianze, intervalli e liste INUguaglianze su colonne ad alta cardinalità, ricerche testuali e geospazialiIntervalli sulle colonne con cui è ordinata la tabella
ChiaviColonne ed espressioni deterministicheColonneColonne ed espressioni
Risponde senza leggere la tabellaSì, se copre la queryNoÈ la tabella stessa a essere riorganizzata
Fatturato comeSearch optimizationSearch optimizationClustering automatico
  1. 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. 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. 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. 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:

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;

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?

2/3Quale tipo di tabella non può avere un indice secondario?

3/3Come viene fatturata la manutenzione degli indici?

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.

Alessandro Ecclesie AgazziScritto da Alessandro Ecclesie Agazzi, analytics engineer a Londra. Aggiornato il 28 ottobre 2026. Chi sono

Ti è stato utile?

Qui escono regolarmente nuove guide e articoli sulle novità di dati e AI. Seguimi su LinkedIn o condividi questo articolo con un collega.