Prestandaoptimering och frågeoptimering i PostgreSQL · Lektion

Använda materialiserade vyer för bättre prestanda

Upptäck hur materialiserade vyer kan förberäkna komplexa frågeresultat för att snabba upp rapportering och analys.

Lektion 3 av 410 steg

Använda materialiserade vyer för bättre prestanda är en gratis lektion i Prestandaoptimering och frågeoptimering i PostgreSQL på CoddyKit. Detta är lektion 3 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 materialiserade vyer?

Välkommen till lektionen om materialiserade vyer! De är kraftfulla verktyg i PostgreSQL för att snabba upp komplexa frågor.

Tänk på en materialiserad vy (MV) som en förberäknad resultatuppsättning från en fråga, lagrad på disk. Till skillnad från en vanlig vy, som kör sin fråga varje gång ni använder den, innehåller en MV de faktiska data.

Varför använda materialiserade vyer?

Materialiserade vyer är mycket användbara för prestandan, särskilt när ni arbetar med:

  • Komplexa kopplingar: Frågor som omfattar många tabeller.
  • Aggregeringar: Beräkningar som summor, medelvärden eller antal över stora dataset.
  • Rapportering och analys: Instrumentpaneler och rapporter som ofta frågar samma komplexa data.

Genom att förberäkna och lagra dessa resultat kan MV:er drastiskt minska frågekörningstiden för upprepade förfrågningar.

Skapa er första MV

Ni skapar en materialiserad vy med satsen CREATE MATERIALIZED VIEW, följd av en SELECT-fråga. Frågan definierar de data som ska lagras i er MV.

Vi skapar en enkel materialiserad vy för att se det genomsnittliga priset per kategori från tabellen products.

Skapa en MV praktiskt

Prova att köra det här exemplet. Det skapar en liten tabell products, lägger in några data och skapar sedan en materialiserad vy med namnet category_avg_price utifrån dessa data.

-- Setup table
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    category VARCHAR(50),
    price DECIMAL(10, 2)
);

-- Insert data
INSERT INTO products (name, category, price) VALUES
('Laptop', 'Electronics', 1200.00),
('Mouse', 'Electronics', 25.00),
('Keyboard', 'Electronics', 75.00),
('Desk Chair', 'Furniture', 150.00),
('Lamp', 'Furniture', 40.00);

-- Create Materialized View
CREATE MATERIALIZED VIEW category_avg_price AS
SELECT category, AVG(price) AS average_price, COUNT(*) AS product_count
FROM products
GROUP BY category
ORDER BY category;

-- Select from MV
SELECT * FROM category_avg_price;

Håll data aktuella

En viktig skillnad jämfört med vanliga vyer är att materialiserade vyer inte uppdateras automatiskt när de underliggande data ändras. Ni måste uttryckligen uppdatera dem.

Använd kommandot REFRESH MATERIALIZED VIEW för att uppdatera data i en MV. För stora MV:er kan ni lägga till CONCURRENTLY så att andra frågor kan komma åt vyn medan den uppdateras.

Demonstration av <code>REFRESH MATERIALIZED VIEW</code>

Vi lägger till en ny produkt i tabellen products och uppdaterar sedan vår materialiserade vy category_avg_price. Lägg märke till att MV:n visar de gamla data tills den har uppdaterats.

-- Add new data to the base table
INSERT INTO products (name, category, price) VALUES
('Monitor', 'Electronics', 300.00);

-- Check MV (will NOT show new data yet)
SELECT * FROM category_avg_price;

-- Refresh the Materialized View
REFRESH MATERIALIZED VIEW category_avg_price;

-- Check MV again (NOW shows new data)
SELECT * FROM category_avg_price;

MV jämfört med vanliga vyer

Det är viktigt att förstå de grundläggande skillnaderna mellan materialiserade vyer och vanliga vyer:

  • Vanliga vyer: Är i princip lagrade frågor. De lagrar inte själva några data, utan kör sin definierande fråga varje gång de används.
  • Materialiserade vyer: Lagrar resultatet av sin definierande fråga som faktiska data på disk. Det gör läsning från dem mycket snabbare, men de kräver manuell eller schemalagd uppdatering.

Välj MV:er när prestandan är avgörande för komplexa och relativt oföränderliga data.

När ska ni välja materialiserade vyer?

Materialiserade vyer passar bra för:

  • Batchrapportering: Dagliga, veckovisa eller månatliga rapporter som inte behöver realtidsdata.
  • Data warehouse: Föraggregering av data för snabbare analytiska frågor.
  • Externa instrumentpaneler: Snabb åtkomst till komplexa mätvärden för BI-verktyg.
  • Statiska data: När de underliggande tabellerna inte ändras särskilt ofta, vilket minimerar kostnaden för uppdateringar.

Undvik MV:er för mycket transaktionsintensiva realtidsdata som behöver omedelbara uppdateringar.

Kunskapskontroll: MV

Anta att det finns en materialiserad vy med namnet daily_sales_summary som aggregerar försäljningsdata från tabellen transactions.

Om nya transaktioner läggs till i tabellen transactions, vad måste ni göra för att daily_sales_summary ska återspegla den nya försäljningen?

Materialiserade vyer: repetition

I den här lektionen har ni lärt er om materialiserade vyer i PostgreSQL.

  • De är förberäknade frågeresultat som lagras på disk och ger betydande prestandavinster för komplexa, återkommande frågor.
  • Ni skapar dem med CREATE MATERIALIZED VIEW.
  • De kräver uttrycklig uppdatering med REFRESH MATERIALIZED VIEW för att deras data ska uppdateras.
  • De passar utmärkt för rapportering, analys och data warehouse-scenarier där realtidsuppdateringar inte är avgörande.

Fortsätt öva med MV:er för att behärska denna kraftfulla optimeringsteknik!

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 ”Använda materialiserade vyer för bättre prestanda” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Prestandaoptimering och frågeoptimering i PostgreSQL, inklusive ”Använda materialiserade vyer för bättre prestanda”, 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 ”Använda materialiserade vyer för bättre prestanda”?

Upptäck hur materialiserade vyer kan förberäkna komplexa frågeresultat för att snabba upp rapportering och analys. 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 3 av 4.

Hur lång tid tar lektionen ”Använda materialiserade vyer för bättre prestanda”?

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. Optimera aggregat och fönsterfunktioner
  2. Rekursiva CTE:er och graf frågeuttryck
  3. Använda materialiserade vyer för bättre prestanda
  4. Optimera frågor med FILTER och villkorsstyrd aggregering
← Tillbaka till Prestandaoptimering och frågeoptimering i PostgreSQL