sql >> Database >  >> RDS >> PostgreSQL

Hoe dwing ik Postgres om een ​​bepaalde index te gebruiken?

Ervan uitgaande dat u vraagt ​​naar de algemene "index hinting"-functie die in veel databases wordt gevonden, biedt PostgreSQL zo'n functie niet. Dit was een bewuste beslissing van het PostgreSQL-team. Een goed overzicht van waarom en wat u in plaats daarvan kunt doen, vindt u hier. De redenen zijn eigenlijk dat het een prestatiehack is die later meer problemen veroorzaakt als uw gegevens veranderen, terwijl de optimalisatieprogramma van PostgreSQL het plan opnieuw kan evalueren op basis van de statistieken. Met andere woorden, wat vandaag de dag een goed zoekplan is, is waarschijnlijk niet voor altijd een goed zoekplan, en indexhints dwingen een bepaald zoekplan voor altijd af.

Als een zeer botte hamer, handig om te testen, kunt u de enable_seqscan gebruiken en enable_indexscan parameters. Zie:

  • Indexgebruik onderzoeken
  • enable_ parameters

Deze zijn niet geschikt voor continu productiegebruik . Als u problemen hebt met de keuze van het queryplan, moet u de documentatie raadplegen voor het opsporen van prestatieproblemen met query's. Stel niet alleen enable_ in params en loop weg.

Tenzij u een zeer goede reden hebt om de index te gebruiken, maakt Postgres mogelijk de juiste keuze. Waarom?

  • Voor kleine tabellen is het sneller om opeenvolgende scans uit te voeren.
  • Postgres gebruikt geen indexen wanneer gegevenstypes niet goed overeenkomen, het kan zijn dat u de juiste casts moet opnemen.
  • Uw planner-instellingen kunnen problemen veroorzaken.

Zie ook deze oude nieuwsgroeppost.



  1. ORA-00904:ongeldige identificatie

  2. Index viel buiten de grenzen van de array. (Microsoft.SqlServer.smo)

  3. Slaapstand en database met meerdere tenants met behulp van schema's in PostgreSQL

  4. PostgreSQL:prestatie pg_dump, pg_restore verbeteren