Prestandaoptimering och frågeoptimering i PostgreSQL · Lektion

Skapa och använda index

En praktisk guide till hur du skapar index, förstår deras syntax och använder dem för att förbättra frågeprestandan.

Lektion 2 av 412 steg

Skapa och använda index är en gratis lektion i Prestandaoptimering och frågeoptimering i PostgreSQL på CoddyKit. Detta är lektion 2 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.

Välkommen till indexskapande

I den förra lektionen lärde vi oss om B-Tree-index, den vanligaste typen i PostgreSQL. Nu blir det praktiskt! I den här lektionen får du lära dig att skapa, använda och hantera index för att förbättra frågeprestandan.

Du får lära dig syntaxen, se praktiska exempel och förstå när och hur index används effektivt.

Satsen CREATE INDEX

Grundsyntaxen för att skapa ett index är enkel. Du anger tabellen, kolumnen eller kolumnerna som ska indexeras och valfritt indextypen (även om B-Tree är standard och vanligast).

  • CREATE INDEX: Kommandot för att skapa ett nytt index.
  • index_name: Ett unikt namn som du väljer för indexet.
  • table_name: Tabellen som indexet byggs på.
  • column_name(s): Kolumnen eller kolumnerna som ska ingå i indexet.

Enkel demonstration av indexskapande

Nu skapar vi en enkel tabell med products, infogar data och lägger sedan till ett index på en enda kolumn. Denna uppsättning används i de följande exemplen.

DROP TABLE IF EXISTS products;

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  product_name VARCHAR(100),
  price DECIMAL(10, 2),
  category VARCHAR(50)
);

INSERT INTO products (product_name, price, category) VALUES
('Laptop', 1200.00, 'Electronics'),
('Mouse', 25.00, 'Electronics'),
('Keyboard', 75.00, 'Electronics'),
('Desk Chair', 150.00, 'Furniture'),
('Monitor', 300.00, 'Electronics'),
('Webcam', 50.00, 'Electronics'),
('Gaming PC', 1500.00, 'Electronics'),
('Office Desk', 250.00, 'Furniture'),
('Bookshelf', 80.00, 'Furniture'),
('Smartwatch', 199.99, 'Wearables');

CREATE INDEX idx_products_category ON products (category);

Verifiera ditt nya index

När du har skapat ett index är det bra att bekräfta att det finns. PostgreSQL erbjuder flera sätt att granska tabellens struktur och dess tillhörande index.

  • I kommandoradsklienten psql skriver du \d products för att se information om tabellen products, inklusive dess index.
  • Alternativt kan du fråga systemkatalogtabeller som pg_indexes: SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'products';

När index hjälper frågor

Index är mest effektiva när PostgreSQL snabbt behöver hitta specifika rader utan att genomsöka hela tabellen. Tänk på dem som registret i en lärobok, som pekar direkt på relevanta sidor.

  • WHERE-satser: Filtrering av data med indexerade kolumner (t.ex. WHERE category = 'Electronics').
  • ORDER BY-satser: Sortering av data efter indexerade kolumner.
  • JOIN-villkor: Koppling av tabeller via indexerade kolumner.

Utan ett index kan PostgreSQL behöva utföra en långsam "sekventiell genomsökning" av stora tabeller.

Ett enkolumnsindex i praktiken

Vi använder EXPLAIN för att se hur indexet idx_products_category kan hjälpa en fråga som filtrerar på kolumnen category. EXPLAIN visar frågeplanen och avslöjar om ett index används.

-- Query that benefits from idx_products_category
EXPLAIN SELECT * FROM products WHERE category = 'Electronics';

-- Another example where the index might help with sorting
EXPLAIN SELECT product_name, price FROM products WHERE category = 'Furniture' ORDER BY price DESC;

Sammansatta index (flera kolumner)

Ibland filtrerar eller sorterar dina frågor efter *flera* kolumner samtidigt. I sådana fall kan ett sammansatt index (eller index med flera kolumner) vara mycket användbart.

Det innehåller mer än en kolumn, och kolumnernas ordning spelar roll! Placera de kolumner som används oftast eller är mest selektiva (de med flest unika värden) först.

Skapa ett sammansatt index

Vi skapar ett sammansatt index på både category och price. Det är användbart för frågor som filtrerar efter kategori och sedan filtrerar eller sorterar efter pris inom den kategorin.

DROP INDEX IF EXISTS idx_products_category_price;
CREATE INDEX idx_products_category_price ON products (category, price);

-- Query benefiting from the composite index
EXPLAIN SELECT product_name, price
FROM products
WHERE category = 'Electronics' AND price > 100
ORDER BY price DESC;

När du inte bör skapa index

Index är inte alltid en universallösning. De medför vissa avvägningar:

  • Lagringsutrymme: Index använder diskutrymme, potentiellt mycket för stora tabeller.
  • Skrivöverhead: Varje INSERT, UPDATE eller DELETE på en indexerad kolumn kräver att indexet uppdateras, vilket kan göra skrivoperationer långsammare.
  • För många index: För många index kan förvirra frågeplaneraren eller öka skrivöverhead, vilket försämrar den övergripande prestandan.

Undvik att indexera kolumner med mycket få unika värden (t.ex. en boolesk kolumn is_active).

Ta bort ett index

Om ett index inte längre behövs, eller om du har skapat ett bättre, kan du enkelt ta bort det med kommandot DROP INDEX. Det frigör lagringsutrymme och minskar skrivöverhead i databasen.

DROP INDEX IF EXISTS idx_products_category_price;
DROP INDEX IF EXISTS idx_products_category;

-- You can also drop the table if you want to clean up completely
-- DROP TABLE IF EXISTS products;

Test om indexering

Du har lärt dig att skapa och hantera index. Nu testar vi dina kunskaper!

Repetition: Skapa och använda index

Utmärkt arbete! I den här lektionen har du lärt dig de praktiska stegen för att skapa och hantera index i PostgreSQL:

  • Vi använde kommandot CREATE INDEX för att lägga till index i tabeller.
  • Vi utforskade både enkolumnsindex och sammansatta index (med flera kolumner).
  • Du lärde dig när index är användbara (WHERE, ORDER BY, JOIN) och vilka avvägningar de medför (skrivöverhead, lagring).
  • Slutligen lärde du dig också att verifiera och ta bort index med DROP INDEX.

Härnäst går vi djupare in på bästa praxis för att avgöra *vilka* kolumner som bör indexeras och hur du undviker vanliga fallgropar!

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 ”Skapa och använda index” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Prestandaoptimering och frågeoptimering i PostgreSQL, inklusive ”Skapa och använda index”, 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 ”Skapa och använda index”?

En praktisk guide till hur du skapar index, förstår deras syntax och använder dem för att förbättra frågeprestandan. 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 2 av 4.

Hur lång tid tar lektionen ”Skapa och använda index”?

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. Grunderna i B-trädindex
  2. Skapa och använda index
  3. När och hur index ska användas
  4. Sammansatta och täckande index
← Tillbaka till Prestandaoptimering och frågeoptimering i PostgreSQL