sql >> Database >  >> RDS >> PostgreSQL

Postgres-queryoptimalisatie (een indexscan afdwingen)

Voor testen doeleinden kunt u het gebruik van de index afdwingen door sequentiële scans uit te schakelen - alleen het beste in uw huidige sessie:

SET enable_seqscan = OFF;

Doe niet gebruik dit op een productieve server. Details in de handleiding hier.

Ik citeerde "uitschakelen", omdat je sequentiële tabelscans niet echt kunt uitschakelen. Maar elke andere beschikbare optie heeft nu de voorkeur voor Postgres. Dit zal bewijzen dat de index met meerdere kolommen op (metric_id, t) kan worden gebruikt - alleen niet zo effectief als een index op de eerste kolom.

U krijgt waarschijnlijk betere resultaten door de volgorde van de kolommen in uw PRIMARY KEY . te wijzigen (en de index die werd gebruikt om het achter de gordijnen ermee te implementeren) naar (t, metric_id) . Of maak een extra index met omgekeerde kolommen zoals dat.

  • Is een samengestelde index ook goed voor zoekopdrachten op het eerste veld?

U hoeft normaal gesproken geen betere queryplannen te forceren door handmatig in te grijpen. Als u enable_seqscan = OFF instelt, leidt tot een veel beter plan, klopt er waarschijnlijk iets niet in je database. Overweeg dit gerelateerde antwoord:

  • Voorkom dat PostgreSQL soms een slecht queryplan kiest


  1. De aggregatie-operator voor vermenigvuldiging in SQL

  2. Hoe MySQL-database te herstellen van .myd-, .myi-, .frm-bestanden

  3. SQL-injectie zonder parameters vermijden

  4. De Aria Storage Engine gebruiken met MariaDB Server