sql >> Database >  >> RDS >> PostgreSQL

Langzaam lopende Postgres-query

De oorzaak van de traagheid zijn de slechte schattingen van het aantal rijen waardoor PostgreSQL een geneste lus-join kiest. Bijna al uw tijd wordt besteed aan de indexscan op hfj_res_link , die 1113 keer wordt herhaald.

Mijn eerste poging zou zijn om ANALYZE hfj_spidx_date en kijken of dat helpt. Zo ja, zorg er dan voor dat autoanalyse die tabel vaker behandelt.

De volgende poging zou zijn om

SET default_statistics_target = 1000;

en dan ANALYZE zoals hierboven. Als dat helpt, gebruik dan ALTER TABLE om de STATISTICS . te verhogen op de hash_identity en sp_value_high kolommen.

Als dat ook niet helpt, en je hebt een recente versie van PostgreSQL, kun je uitgebreide statistieken proberen :

CREATE STATISTICS myparamsda2_stats (dependencies)
   ON hash_identity, sp_value_high FROM hfj_spidx_date;

Dan ANALYZE de tafel opnieuw en kijk of dat helpt.

Als dat allemaal niet helpt en u de schattingen niet correct kunt krijgen, moet u een andere hoek proberen:

CREATE INDEX ON hfj_res_link (target_resource_id, src_resource_id);

Dat zou de indexscan aanzienlijk moeten versnellen en je goede responstijden moeten geven.

Ten slotte, als geen van de bovenstaande effecten enig effect heeft, kunt u de kruismaat gebruiken om geneste lus-joins voor deze query niet toe te staan:

BEGIN;
SET LOCAL enable_nestloop = off;
SELECT /* your query goes here */;
COMMIT;



  1. Hoe .sql-bestand uit te voeren met powershell?

  2. BESTEL OP DATUM met eerst NULLS en vervolgens de meest recente datums

  3. Selecteer verschillende records voor een join

  4. Hoe MySQL op Ubuntu te installeren en configureren