Materialiserede views og REFRESH-strategier
Gem resultatet af en dyr forespørgsel med MATERIALIZED VIEW, og opdatér det efter en tidsplan eller efter behov.
Materialiserede views og REFRESH-strategier er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
Materialiseret view = gemt resultat
I modsætning til et almindeligt view gemmer et materialiseret view resultatet af sin SELECT på disken. Forespørgsler læser de gemte data — hurtigt. Opdatér efter behov.
CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day,
SUM(total) AS revenue
FROM orders
GROUP BY 1;Forespørgsler
Forespørgsler er blot SELECT-forespørgsler på de materialiserede data:
SELECT * FROM daily_revenue WHERE day >= NOW() - INTERVAL '30 days';REFRESH MATERIALIZED VIEW
Genberegn resultatet. Låser viewet eksklusivt:
REFRESH MATERIALIZED VIEW daily_revenue;
-- Selects on the view block during refresh.REFRESH MATERIALIZED VIEW CONCURRENTLY
Opdatering uden blokering — læsere får fortsat de gamle data, indtil de nye er klar. Kræver et unikt indeks på viewet:
CREATE UNIQUE INDEX ON daily_revenue (day);
REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;Indeks på materialiserede views
Du kan oprette indeks på et materialiseret view som på enhver tabel — det gør forespørgsler hurtigere:
CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);Hvornår skal du materialisere
Brug materialiserede views, når:
- Den underliggende forespørgsel er dyr
- Resultatet godt må være en smule forældet
- Forespørgslen køres mange gange mellem opdateringer
Planlagt opdatering
Der findes ingen indbygget planlægger. Brug pg_cron, et OS-cronjob eller din apps planlægger:
-- Via pg_cron extension:
SELECT cron.schedule('refresh_daily', '0 1 * * *', 'REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;');Inkrementel opdatering
PostgreSQL har ingen indbygget inkrementel opdatering — hver REFRESH genberegner fra bunden. Til inkrementel aggregering kan du se på:
- Egenudviklede triggerbaserede "opsummeringstabeller"
- Kontinuerlige aggregater i TimescaleDB
- Udvidelsen pg_ivm (inkrementelle materialiserede views)
Læsning fra underliggende tabeller uden at påvirke læsninger
CONCURRENT-opdatering læser de underliggende tabeller i et transaktionssnapshot — den blokerer dem ikke. Men selve opdateringen kan være langsom på enorme datamængder.
Diskforbrug
Et materialiseret view fordobler lagringsbehovet for sine data. Planlæg diskpladsen derefter.
Kombinér med partitionering
Ved enorme tidsserier kan du opdele det materialiserede view (eller bruge TimescaleDB):
CREATE MATERIALIZED VIEW orders_summary AS ... ;
CREATE INDEX ON orders_summary (day);
-- For very large views, consider regular table + manual upsert pattern.Hvornår skal du ikke bruge dem
Hvis dine læsninger kan tåle SQL med friske data, og den underliggende forespørgsel allerede er hurtig, kan du spare vedligeholdelsen af opdateringerne. Materialiserede views er en afvejning — forældede data for hastighed.
Opsamling
Materialiserede views fungerer som cache for forespørgselsresultater.
- Gemt på disken, indekseret og hurtigt
- REFRESH manuelt eller efter en tidsplan
- CONCURRENTLY kræver et UNIQUE-indeks
- Brug dem til dyre aggregeringer, der gerne må være lidt forældede
Hurtigt tjek
Hvad kræver REFRESH MATERIALIZED VIEW CONCURRENTLY, som den almindelige REFRESH ikke gør?
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “Materialiserede views og REFRESH-strategier” gratis?
Ja — hele teksten til “Materialiserede views og REFRESH-strategier” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Materialiserede views og REFRESH-strategier”?
Gem resultatet af en dyr forespørgsel med MATERIALIZED VIEW, og opdatér det efter en tidsplan eller efter behov. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Materialiserede views og REFRESH-strategier”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne SQL Academy-lektion?
Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Almindelige views: Logisk genbrug
- Opdaterbare views og INSTEAD OF-triggers
- Materialiserede views og REFRESH-strategier
- Hvornår skal De præaggregere