sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres-frågeoptimering (tvingar fram en indexskanning)

För testning syften kan du tvinga fram användningen av indexet genom att "inaktivera" sekventiella skanningar - bäst endast under din nuvarande session:

SET enable_seqscan = OFF;

Gör inte använd detta på en produktiv server. Detaljer i manualen här.

Jag citerade "inaktivera", eftersom du faktiskt inte kan inaktivera sekventiella tabellsökningar. Men alla andra tillgängliga alternativ är nu att föredra för Postgres. Detta kommer att bevisa att flerkolumnsindexet på (metric_id, t) kan användas - bara inte lika effektivt som ett index på den inledande kolumnen.

Du får förmodligen bättre resultat genom att ändra ordningen på kolumner i din PRIMARY KEY (och indexet som används för att implementera det bakom gardinerna med det) till (t, metric_id) . Eller skapa en extra index med omvända kolumner som det.

  • Är ett sammansatt index också bra för frågor i det första fältet?

Du behöver normalt inte tvinga fram bättre frågeplaner genom manuell intervention. Om du ställer in enable_seqscan = OFF leder till mycket bättre plan, något är förmodligen inte rätt i din databas. Tänk på det här relaterade svaret:

  • Få PostgreSQL från att ibland välja en dålig frågeplan


  1. Oracle 12.2.0.1 kommer 2016

  2. Matcha Oracle-duplicerade kolumnvärden med Soundex, Jaro Winkler och Edit Distance (UTL_MATCH)

  3. Hur man kör ett SQL Server Agent Job med T-SQL

  4. PERIOD_DIFF() Exempel – MySQL