Kolonner, der bruges til filtrering eller deltager (eller, i mindre grad, sortering ) er af interesse for indeksering. Kolonner, der netop er valgt, er knap relevante! For følgende forespørgsel indekserer kun a og e kan være nyttigt:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Her f og muligvis c er også 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;
Efter at have oprettet indekser, test for at se, om de faktisk er nyttige med EXPLAIN ANALYZE
. Sammenlign også udførelsestider med og uden indekserne. Det er hurtigt og nemt at slette og genskabe indekser. Der er også parametre til eksperiment
med EXPLAIN ANALYZE
. Forskellen kan være svimlende eller ikke-eksisterende.
Da dine tabeller er skrivebeskyttede, er indeksvedligeholdelse billig. Det er kun et spørgsmål om diskplads.
Hvis du virkelig vil vide, hvad du laver, start med at læse dokumenterne .
Hvis du ikke ved, hvilke forespørgsler du kan forvente ...
-
Prøv at logge nok forespørgsler til at finde typiske use cases. Log forespørgsler med parameteren
log_statement = all
for det. Eller bare log langsomme forespørgsler ved hjælp aflog_min_duration_statement
. -
Opret indekser det kan være nyttigt, og tjek statistikken efter nogen tid for at se, hvad der rent faktisk bliver brugt. PostgreSQL har en hel infrastruktur på plads til overvågning af statistik . En bekvem måde at studere statistik på (og mange andre opgaver) er pgAdmin hvor du kan vælge din tabel / funktion / indeks og få alle data på fanen "statistik" i objektbrowseren (hovedvinduet).
-
Fortsæt som beskrevet ovenfor for at se, om indekser i brug faktisk fremskynder tingene.
-
Hvis forespørgselsplanlæggeren skulle vælge at bruge et eller flere af dine indekser, men med ingen eller negativ effekt, er der sandsynligvis noget galt med din opsætning, og du skal studere grundlæggende om ydeevneoptimering:vakuum, analyse, omkostningsparametre, hukommelsesbrug, ...