Avansert PostgreSQL: Indeksering, partisjonering og replikering · leksjon

Partisjonsbeskjæring og -utelukkelse

Gå i dybden på hvordan optimalisatoren bruker partisjonsnøkler til å utelukke irrelevante partisjoner, slik at mengden skannede data reduseres kraftig.

Leksjon 3 av 411 trinn

Partisjonsbeskjæring og -utelukkelse er en gratis leksjon i Avansert PostgreSQL: Indeksering, partisjonering og replikering på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Avansert PostgreSQL: Indeksering, partisjonering og replikering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Avansert PostgreSQL: Indeksering, partisjonering og replikering inneholder totalt 4 leksjoner.

Hva er partisjonsbeskjæring?

Velkommen til en viktig optimaliseringsteknikk i PostgreSQL: partisjonsbeskjæring. Dette innebærer at databasen på en intelligent måte hopper over partisjoner som umulig kan inneholde dataene en spørring leter etter.

Tenk på det som å filtrere bokhyller: Hvis De leter etter en bok som ble utgitt i 2023, ville De ikke undersøkt hyller merket «1990–1999» eller «2000–2010».

Slik fungerer optimizereren

Når De kjører en spørring på en partisjonert tabell, undersøker PostgreSQLs spørringsplanlegger WHERE-leddet. Den sammenligner betingelsene i spørringen med definisjonene av tabellens partisjoner.

Hvis betingelsene i spørringen garanterer at enkelte partisjoner umulig kan inneholde samsvarende rader, utelater optimizereren ganske enkelt disse partisjonene fra skanneplanen. Dette reduserer betydelig mengden data som må leses fra disken.

Beskjæring med intervallpartisjoner

Partisjonsbeskjæring er tydeligst med intervallpartisjonerte tabeller, særlig tabeller som er partisjonert etter dato eller tidsstempel. Hvis De for eksempel har en tabell som er partisjonert etter måned og spør etter data fra en bestemt uke, blir bare den eller de relevante måneds-partisjonene skannet.

Dette er svært effektivt for tidsseriedata, siden spørringer ofte gjelder bestemte tidsperioder.

Demo: Intervallbeskjæring i praksis

La oss opprette en enkel intervallpartisjonert tabell og se hvordan EXPLAIN viser beskjæringen. Vi partisjonerer etter sale_date.

Legg merke til at resultatet fra EXPLAIN bare viser en skanning av den relevante partisjonen, ikke de andre.

CREATE TABLE sales (
    sale_id INT,
    sale_date DATE,
    amount NUMERIC
) PARTITION BY RANGE (sale_date);

CREATE TABLE sales_2023_q1 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2023-04-01');

CREATE TABLE sales_2023_q2 PARTITION OF sales
FOR VALUES FROM ('2023-04-01') TO ('2023-07-01');

INSERT INTO sales VALUES (1, '2023-01-15', 100);
INSERT INTO sales VALUES (2, '2023-04-20', 200);

EXPLAIN SELECT * FROM sales WHERE sale_date = '2023-01-15';

Beskjæring med listepartisjoner

Partisjonsbeskjæring fungerer også effektivt med listepartisjonerte tabeller. Hvis tabellen er partisjonert etter en diskret verdi, for eksempel en region eller en statuskode, og spørringen filtrerer på denne bestemte verdien, blir bare den tilsvarende partisjonen skannet.

Dette er nyttig når De ofte spør etter data som gjelder bestemte kategorier eller grupper.

Demo: Eksempel på listebeskjæring

Her er et eksempel med en listepartisjonert tabell basert på en region-kolonne. Se på resultatet fra EXPLAIN for å se at bare «North»-partisjonen blir skannet.

CREATE TABLE products (
    product_id INT,
    region TEXT,
    price NUMERIC
) PARTITION BY LIST (region);

CREATE TABLE products_north PARTITION OF products
FOR VALUES IN ('North');

CREATE TABLE products_south PARTITION OF products
FOR VALUES IN ('South');

INSERT INTO products VALUES (101, 'North', 50.00);
INSERT INTO products VALUES (102, 'South', 75.00);

EXPLAIN SELECT * FROM products WHERE region = 'North';

Statisk kontra dynamisk beskjæring

PostgreSQL bruker to hovedtyper av beskjæring:

  • Statisk beskjæring: Utføres ved planlegging av spørringen. Planleggeren kan se de eksplisitte verdiene i WHERE-leddet og utelate partisjoner umiddelbart.
  • Dynamisk beskjæring: Utføres under kjøringen av spørringen. Dette gjelder mer komplekse tilfeller, for eksempel når partisjonsnøkkelen filtreres av resultatet fra en underspørring eller av en parameter fra en sammenføyning. Databasen avgjør hvilke partisjoner som skal skannes, mens spørringen kjører.

Når beskjæring kanskje ikke utføres

Selv om partisjonsbeskjæring er kraftig, er det ikke alltid mulig:

  • Komplekse uttrykk: Hvis WHERE-leddet bruker en funksjon eller et komplekst uttrykk på partisjonsnøkkelen (for eksempel EXTRACT(MONTH FROM sale_date) = 1).
  • Filtre som ikke bruker partisjonsnøkkelen: Spørringer som bare filtrerer på kolonner som ikke er en del av partisjonsnøkkelen, skanner alle partisjonene.
  • Sammenføyninger: Beskjæring ved sammenføyninger kan være mer komplisert, særlig hvis sammenføyningsbetingelsen ikke direkte involverer partisjonsnøkkelen, eller hvis verdiene ikke er kjent før kjøringen.

Bekreft beskjæring med EXPLAIN

Bruk alltid EXPLAIN (eller EXPLAIN ANALYZE) for å bekrefte at partisjonsbeskjæring fungerer. Se etter linjer som:

  • -> Partition Selector (Dyanmic Partition Pruning)
  • -> Append (partitions: 1)
  • -> Result (partitions: 1)

Det viktige er å se at et begrenset antall partisjoner blir valgt, i stedet for at hele den partisjonerte tabellen eller alle undertabellene skannes.

Sjekk: Fordeler med beskjæring

Det er avgjørende å forstå partisjonsbeskjæring for å optimalisere spørringer på store partisjonerte tabeller. La oss teste kunnskapene Deres!

Partisjonsbeskjæring på høygir!

De behersker nå partisjonsbeskjæring! De forstår nå at dette er en viktig PostgreSQL-optimalisering som:

  • Reduserer mengden data som skannes, betydelig.
  • Fungerer ved å sammenligne WHERE-ledd med partisjonsdefinisjoner.
  • Er spesielt effektiv med intervall- og listepartisjoner.
  • Kan være statisk (ved planlegging) eller dynamisk (under kjøring).
  • Kan bekreftes ved hjelp av EXPLAIN.

Ved å utnytte partisjonsbeskjæring sørger De for at spørringene kjører så effektivt som mulig på store datasett!

Gratis å komme i gang

Lær deg Avansert PostgreSQL: Indeksering, partisjonering og replikering med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
11
Leksjoner
44

Ofte stilte spørsmål

Er leksjonen «Partisjonsbeskjæring og -utelukkelse» gratis?

Ja – hele teksten i «Partisjonsbeskjæring og -utelukkelse» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Avansert PostgreSQL: Indeksering, partisjonering og replikering-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Avansert PostgreSQL: Indeksering, partisjonering og replikering inneholder totalt 4 leksjoner.

Hva lærer jeg i «Partisjonsbeskjæring og -utelukkelse»?

Gå i dybden på hvordan optimalisatoren bruker partisjonsnøkler til å utelukke irrelevante partisjoner, slik at mengden skannede data reduseres kraftig. Du øver på Avansert PostgreSQL: Indeksering, partisjonering og replikering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Avansert PostgreSQL: Indeksering, partisjonering og replikering?

Ingen tidligere erfaring er nødvendig. Avansert PostgreSQL: Indeksering, partisjonering og replikering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Partisjonsbeskjæring og -utelukkelse»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Avansert PostgreSQL: Indeksering, partisjonering og replikering-leksjonen?

Ja. Alle Avansert PostgreSQL: Indeksering, partisjonering og replikering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Spørringsoptimalisering med partisjonering
  2. Koble til og fra partisjoner
  3. Partisjonsbeskjæring og -utelukkelse
  4. Partisjonsvise sammenføyninger og aggregasjoner
← Tilbake til Avansert PostgreSQL: Indeksering, partisjonering og replikering