Kolumner som används för filtrering eller gå med (eller, i mindre grad, sortering ) är av intresse för indexering. Kolumner som just valts är knappt relevanta! För följande fråga indexerar endast a och e kan vara användbart:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Här, f och eventuellt c är också kandidater:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
När du har skapat index, testa för att se om de faktiskt är användbara med EXPLAIN ANALYZE
. Jämför även körtider med och utan index. Att ta bort och återskapa index är snabbt och enkelt. Det finns också parametrar för att experimentera
med EXPLAIN ANALYZE
. Skillnaden kan vara häpnadsväckande eller obefintlig.
Eftersom dina tabeller är skrivskyddade är indexunderhåll billigt. Det är bara en fråga om diskutrymme.
Om du verkligen vill veta vad du gör, börja med att läsa dokumenten .
Om du inte vet vilka frågor du kan förvänta dig ...
-
Försök att logga tillräckligt många frågor för att hitta typiska användningsfall. Logga frågor med parametern
log_statement = all
för det. Eller logga bara långsamma frågor medlog_min_duration_statement
. -
Skapa index det kan vara användbart och kontrollera statistiken efter en tid för att se vad som faktiskt används. PostgreSQL har en hel infrastruktur på plats för övervakning av statistik . Ett bekvämt sätt att studera statistik (och många andra uppgifter) är pgAdmin där du kan välja din tabell / funktion / index och få all data på fliken "statistik" i objektläsaren (huvudfönstret).
-
Fortsätt enligt beskrivningen ovan för att se om index som används faktiskt påskyndar saker och ting.
-
Om frågeplaneraren skulle välja att använda ett eller flera av dina index men med ingen eller negativ effekt så är det förmodligen något fel med din inställning och du måste studera grunderna för prestandaoptimering:vakuum, analys, kostnadsparametrar, minnesanvändning, ...