Partizionamento per intervallo, lista e hash
Scelga la strategia di partizionamento adatta: intervallo per le serie temporali, lista per i tenant, hash per una distribuzione uniforme.
Partizionamento per intervallo, lista e hash è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Partizionamento per intervalli
Ogni partizione copre un intervallo continuo di valori. È la scelta più comune per le serie temporali:
CREATE TABLE events (
id BIGSERIAL,
ts TIMESTAMPTZ NOT NULL,
data JSONB
) PARTITION BY RANGE (ts);
CREATE TABLE events_2024_q1 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');I limiti degli intervalli sono semiaperti
FROM è inclusivo, TO è esclusivo. I confini si allineano correttamente: nessuna sovrapposizione e nessun intervallo scoperto.
Partizionamento per lista
Ogni partizione contiene valori specifici:
CREATE TABLE customers (
id BIGSERIAL,
country TEXT NOT NULL,
name TEXT
) PARTITION BY LIST (country);
CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;Partizione DEFAULT
Raccoglie le righe che non corrispondono a nessun'altra partizione. In sua assenza, gli INSERT di righe non corrispondenti hanno esito negativo.
Partizionamento hash
Le righe vengono distribuite tramite l'hashing della chiave di partizionamento. È utile quando si desidera una distribuzione uniforme ma non esiste un intervallo o una lista naturale:
CREATE TABLE sessions (
id UUID,
user_id BIGINT,
data JSONB
) PARTITION BY HASH (user_id);
CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);Scegliere una strategia
- Range — serie temporali, ID che crescono monotonicamente
- List — tenant, Paesi, livelli hot
- Hash — quando non esiste una distorsione naturale e si desidera solo il parallelismo
Sotto-partizionamento
Le partizioni possono essere ulteriormente partizionate (su più livelli):
CREATE TABLE events_2024 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.Indici su tabelle partizionate
Gli indici sulla tabella padre vengono propagati automaticamente a tutte le partizioni. I vincoli UNIQUE devono includere la chiave di partizionamento:
CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.
ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.Chiavi primarie e partizioni
La PRIMARY KEY di una tabella partizionata deve includere la colonna di partizionamento. È un vincolo fondamentale del partizionamento dichiarativo.
Aggiungere ed eliminare partizioni
Operazioni a basso costo:
CREATE TABLE events_2024_q3 PARTITION OF events
FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');
DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.Creazione automatica delle partizioni
Postgres non crea automaticamente le partizioni future. Soluzioni comuni:
- Estensione pg_partman — partizioni mensili gestite automaticamente
- Job pianificato che esegue CREATE per la partizione successiva
Chiavi esterne
Le chiavi esterne verso una tabella partizionata richiedono PG 12+. Le chiavi esterne da una tabella partizionata verso una tabella normale funzionano normalmente.
Riepilogo
Tre strategie di partizionamento coprono la maggior parte dei casi.
- Range per dati temporali o sequenziali
- List per insiemi discreti
- Hash per una distribuzione uniforme
- La PK deve includere la colonna di partizionamento
Controllo rapido
Desidera partizionare una tabella sessions per user_id con distribuzione uniforme e senza un ordinamento naturale. Quale strategia dovrebbe usare?
Domande Frequenti
La lezione «Partizionamento per intervallo, lista e hash» è gratuita?
Sì — il testo completo di «Partizionamento per intervallo, lista e hash» è 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 «Partizionamento per intervallo, lista e hash»?
Scelga la strategia di partizionamento adatta: intervallo per le serie temporali, lista per i tenant, hash per una distribuzione uniforme. 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 2 di 4.
Quanto tempo richiede la lezione «Partizionamento per intervallo, lista e hash»?
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
- Perché partizionare: pruning e manutenzione
- Partizionamento per intervallo, lista e hash
- Scollegare e collegare le partizioni
- Interrogare in modo efficiente tra le partizioni