sql >> Databasteknik >  >> RDS >> PostgreSQL

Optimera PostgreSQL skrivskyddade tabeller

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 ...

  1. 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 med log_min_duration_statement .

  2. 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).

  3. Fortsätt enligt beskrivningen ovan för att se om index som används faktiskt påskyndar saker och ting.

  4. 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, ...



  1. Hur man väljer poster som inte finns i SQL Server

  2. Kan inte ansluta till MySQL live med Laravel 5

  3. DATEDIFF() eller BETWEEN för datumintervall i SQL-frågor

  4. Bästa sättet att lagra ett kategorinamn från php i en mysql-tabell