0Pricing
SQL Academy · Lezione

Interrogare in modo efficiente tra le partizioni

Scriva query che traggano vantaggio dal partition pruning e verifichi il pruning con EXPLAIN.

Interrogare in modo efficiente tra le partizioni è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Filtrare sulla chiave di partizionamento

Il pruning funziona solo quando la clausola WHERE include la chiave di partizionamento:

-- Prunes (uses date partitioning):
SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';

-- No pruning — scans all partitions:
SELECT * FROM events WHERE user_id = 42;

Pruning composito

Il planner può eseguire il pruning usando più chiavi nelle tabelle partizionate su più livelli:

SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01'
  AND user_id = 42;
-- Prunes by date AND by hash partition.

EXPLAIN mostra il pruning

Controlli il piano per verificare che il pruning venga eseguito:

EXPLAIN SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Append
--   -> Seq Scan on events_2024_q1
-- Only Q1 partition shown; others pruned.

Esclusione dei vincoli e pruning delle partizioni

Le versioni moderne di PG usano per impostazione predefinita il rapido "partition pruning". La precedente "constraint exclusion" era più lenta; verifichi che enable_partition_pruning = on sia attivo.

Pruning al momento dell'esecuzione

Anche con query parametrizzate (PREPARE), PG può eseguire il pruning al momento dell'esecuzione:

PREPARE p(timestamptz, timestamptz) AS
SELECT * FROM events WHERE ts >= $1 AND ts < $2;

EXECUTE p('2024-03-01', '2024-04-01');
-- Pruning happens at execute, not at parse.

Indici tra le partizioni

Gli indici vengono propagati alle partizioni. Una query sulla colonna indicizzata funziona su tutte le partizioni, ma il planner analizza l'indice di ciascuna di esse.

Aggregazioni tra le partizioni

Un GROUP BY sulla chiave di partizionamento offre il maggiore vantaggio. Un GROUP BY su altre colonne analizza ogni partizione.

Esecuzione parallela per partizione

PostgreSQL può eseguire in parallelo le scansioni delle partizioni (PG 11 e versioni successive):

SET max_parallel_workers_per_gather = 4;
EXPLAIN SELECT COUNT(*) FROM events;
-- Parallel Append over partitions.

Join tra tabelle partizionate

Se entrambe le tabelle partizionate condividono la chiave di partizionamento, il "partition-wise join" è più veloce: ogni partizione viene collegata in modo indipendente:

SET enable_partitionwise_join = on;
-- Now PG can join events to event_metrics partition-by-partition.

Evitare gli errori comuni

  • Non applichi funzioni alla chiave di partizionamento in WHERE: il pruning non funzionerebbe
  • Non dimentichi la chiave di partizionamento nelle query
  • Non crei migliaia di partizioni molto piccole: il sovraccarico di pianificazione diventerebbe predominante

Un numero ragionevole di partizioni

Si punti a decine o al massimo a poche centinaia di partizioni, non a migliaia. Ogni partizione introduce un sovraccarico nella pianificazione. Per esigenze di granularità molto elevata, usi il sub-partizionamento.

Manutenzione per partizione

VACUUM, ANALYZE e REINDEX vengono eseguiti per partizione e possono essere eseguiti in parallelo. Il vantaggio aumenta all'aumentare del numero di partizioni, entro limiti ragionevoli.

Riepilogo

Il partizionamento premia le query che filtrano per chiave di partizionamento.

  • WHERE sulla chiave di partizionamento → pruning
  • Confermi con EXPLAIN
  • Abiliti il partition-wise join per i join compatibili
  • Non crei un numero eccessivo di partizioni

Controllo rapido

Ha una tabella events partizionata per mese sulla colonna ts. Quale query trae vantaggio dal pruning delle partizioni?

Domande Frequenti

La lezione «Interrogare in modo efficiente tra le partizioni» è gratuita?

Sì — il testo completo di «Interrogare in modo efficiente tra le partizioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Interrogare in modo efficiente tra le partizioni»?

Scriva query che traggano vantaggio dal partition pruning e verifichi il pruning con EXPLAIN. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Interrogare in modo efficiente tra le partizioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché partizionare: pruning e manutenzione
  2. Partizionamento per intervallo, lista e hash
  3. Scollegare e collegare le partizioni
  4. Interrogare in modo efficiente tra le partizioni
← Torna a SQL Academy