Parliamo

project-cherry.dev

Avanzato18 min

SQL Avanzato e Ottimizzazione

Padroneggia window functions, CTE, subquery e tecniche di ottimizzazione per query su milioni di righe.

SQL Avanzato e Ottimizzazione

Quando i dataset crescono, le query base non bastano più. SQL avanzato ti dà strumenti per analisi complesse e performance ottimali.

Window Functions

Le window functions calcolano valori su un "finestra" di righe senza collassare il risultato:

sql
SELECT nome, reparto, stipendio,
    RANK() OVER (PARTITION BY reparto ORDER BY stipendio DESC) as rank_reparto,
    AVG(stipendio) OVER (PARTITION BY reparto) as media_reparto
FROM dipendenti;

Ogni riga mantiene il proprio dettaglio, arricchita con calcoli aggregati.

CTE — Common Table Expressions

Le CTE rendono le query complesse leggibili:

sql
WITH vendite_mensili AS (
    SELECT DATE_TRUNC('month', data) as mese, SUM(importo) as totale
    FROM vendite
    GROUP BY 1
),
trend AS (
    SELECT mese, totale,
        LAG(totale) OVER (ORDER BY mese) as mese_precedente
    FROM vendite_mensili
)
SELECT mese, totale,
    ROUND((totale - mese_precedente) / mese_precedente * 100, 1) as variazione_pct
FROM trend;

Ottimizzazione query

  • EXPLAIN ANALYZE — Leggi il piano di esecuzione prima di ottimizzare
  • Indici — Crea indici sulle colonne usate in WHERE e JOIN
  • Evita SELECT * — Seleziona solo le colonne necessarie
  • LIMIT nelle subquery — Riduci i dati il prima possibile

Consiglio pratico

Una query lenta non si risolve con hardware più potente. Si risolve capendo come il database la esegue e riscrivendola di conseguenza.