PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Query Postgres a esecuzione lenta

La causa della lentezza sono le stime di conteggio delle righe errate che fanno sì che PostgreSQL scelga un join di ciclo nidificato. Trascorri quasi tutto il tuo tempo nella scansione dell'indice su hfj_res_link , che si ripete 1113 volte.

Il mio primo tentativo sarebbe ANALYZE hfj_spidx_date e vedi se questo aiuta. Se sì, assicurati che l'analisi automatica tratti quella tabella più frequentemente.

Il prossimo tentativo sarebbe quello di

SET default_statistics_target = 1000;

e poi ANALYZE come sopra. Se questo aiuta, usa ALTER TABLE per aumentare le STATISTICS su hash_identity e sp_value_high colonne.

Se anche questo non aiuta e hai una versione recente di PostgreSQL, puoi provare statistiche estese :

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

Quindi ANALYZE di nuovo la tabella e vedi se questo aiuta.

Se tutto ciò non aiuta e non riesci a ottenere le stime corrette, devi provare un'angolazione diversa:

CREATE INDEX ON hfj_res_link (target_resource_id, src_resource_id);

Ciò dovrebbe accelerare notevolmente la scansione dell'indice e darti buoni tempi di risposta.

Infine, se nessuno dei precedenti ha alcun effetto, puoi utilizzare la misura cruse di non consentire i join di loop nidificati per questa query:

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