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.
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; justerapages_per_range - Kontrollera
correlationförst; sammanfatta nya block - Undvik dem för slumpmässigt ordnade kolumner
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
- Hash-, GIN- och GiST-index
- Partiella index och uttrycksindex
- Täckande index och index-only-skanningar
- BRIN-index för stora sekventiella datamängder