Prestandaoptimering och frågeoptimering i PostgreSQL · Lektion

BRIN-index för stora sekventiella datamängder

Upptäck BRIN (Block Range INdexes), en liten indextyp som passar utmärkt för enorma tabeller med naturligt ordnade data, till exempel tidsserier och append-only-loggar.

Lektion 4 av 413 steg

BRIN-index för stora sekventiella datamängder är en gratis lektion i Prestandaoptimering och frågeoptimering i PostgreSQL på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Prestandaoptimering och frågeoptimering i PostgreSQL, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Prestandaoptimering och frågeoptimering i PostgreSQL innehåller totalt 4 lektioner.

Vad är ett BRIN-index?

Ett BRIN (Block Range INdex) lagrar sammanfattande information om intervall av fysiska tabellblock i stället för pekare till enskilda rader. Varje post omfattar många sidor, så indexet blir extremt litet.

Hur BRIN skiljer sig från B-tree

Ett B-tree har en post per rad och kan bli stort. Ett BRIN lagrar endast minimi- och maximivärdet för varje blockintervall.

  • B-tree: exakt, stort och utmärkt för slumpmässiga uppslag
  • BRIN: ungefärligt, mycket litet och utmärkt för intervallgenomsökningar av ordnade data

När BRIN är som bäst

BRIN fungerar bäst när kolumnens värden korrelerar med den fysiska lagringsordningen. Typiska fall är:

  • Time series-tabeller ordnade efter tidstämpeln för infogning
  • Loggar där data endast läggs till
  • Stora faktatabeller som läses in i nyckelordning

Skapa ett BRIN-index

Använd klausulen USING brin. Lägg märke till hur litet och snabbt det är att bygga jämfört med ett B-tree på samma kolumn.

CREATE INDEX idx_events_ts_brin
ON events USING brin (created_at);

Fråga via ett BRIN-index

Ett intervallfilter låter optimeraren hoppa över blockintervall vars minimi- eller maximivärde inte kan matcha, så att endast relevanta sidor läses.

EXPLAIN ANALYZE
SELECT * FROM events
WHERE created_at >= '2026-01-01'
  AND created_at <  '2026-02-01';

Alternativet pages_per_range

Ni kan justera hur många sidor varje sammanfattningspost omfattar. Mindre intervall gör indexet mer precist men större.

CREATE INDEX idx_events_ts_brin
ON events USING brin (created_at)
WITH (pages_per_range = 32);

Varför korrelation spelar roll

Om kolumnen inte är fysiskt ordnad kommer nästan alla blockintervall att överlappa sökvärdet, och BRIN genomsöker hela tabellen. Kontrollera korrelationen i statistikvyn.

SELECT attname, correlation
FROM pg_stats
WHERE tablename = 'events';

Sammanfatta nya data

BRIN-poster för nyligen infogade block kan sakna sammanfattning. Kör detta för att sammanfatta dem, så att frågor kan sålla bort dessa intervall.

SELECT brin_summarize_new_values('idx_events_ts_brin');

Jämförelse av storlek

I en tabell med en miljard rader kan ett B-tree vara tiotals gigabyte stort, medan ett BRIN bara är några megabyte. Jämför dem direkt.

SELECT pg_size_pretty(pg_relation_size('idx_events_ts_brin'));

Viktiga avvägningar

BRIN är inte en kostnadsfri vinst:

  • Det är oanvändbart för slumpmässigt ordnade kolumner
  • Det är långsammare än B-tree för exakta uppslag av enstaka rader
  • Nya block måste sammanfattas regelbundet

Välj det när tabellen är enorm och naturligt ordnad.

Underhålla BRIN vid uppdateringar

Om befintliga rader uppdateras mycket kan min/max för ett blockintervall bli bredare och mindre precisa med tiden. För data som förändras ofta bör indexet återskapas regelbundet för att återställa snäva intervall.

REINDEX INDEX idx_events_ts_brin;

Snabbtest

Testa dina kunskaper om BRIN.

Sammanfattning

Du har lärt dig om BRIN-index:

  • De lagrar min/max-sammanfattningar per blockintervall — mycket litet fotavtryck
  • Idealiska för stora, fysiskt ordnade datamängder, till exempel tidsserier
  • Skapas med USING brin; justera pages_per_range
  • Kontrollera correlation först; sammanfatta nya block
  • Undvik dem för slumpmässigt ordnade kolumner
Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
22
Lektioner
88

Vanliga frågor

Är lektionen ”BRIN-index för stora sekventiella datamängder” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Prestandaoptimering och frågeoptimering i PostgreSQL, inklusive ”BRIN-index för stora sekventiella datamängder”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Prestandaoptimering och frågeoptimering i PostgreSQL innehåller totalt 4 lektioner.

Vad lär jag mig i ”BRIN-index för stora sekventiella datamängder”?

Upptäck BRIN (Block Range INdexes), en liten indextyp som passar utmärkt för enorma tabeller med naturligt ordnade data, till exempel tidsserier och append-only-loggar. Ni övar på Prestandaoptimering och frågeoptimering i PostgreSQL med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Prestandaoptimering och frågeoptimering i PostgreSQL?

Du behöver inga förkunskaper. Utbildningen i Prestandaoptimering och frågeoptimering i PostgreSQL på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”BRIN-index för stora sekventiella datamängder”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Prestandaoptimering och frågeoptimering i PostgreSQL-lektionen?

Ja. Varje Prestandaoptimering och frågeoptimering i PostgreSQL-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Hash-, GIN- och GiST-index
  2. Partiella index och uttrycksindex
  3. Täckande index och index-only-skanningar
  4. BRIN-index för stora sekventiella datamängder
← Tillbaka till Prestandaoptimering och frågeoptimering i PostgreSQL