sql >> Databáze >  >> RDS >> PostgreSQL

Pomalý běh dotazu Postgres

Příčinou pomalosti jsou špatné odhady počtu řádků, které nutí PostgreSQL zvolit spojení vnořené smyčky. Téměř všechen svůj čas strávíte indexovým skenováním na hfj_res_link , která se opakuje 1113krát.

Můj první pokus by byl ANALYZE hfj_spidx_date a uvidíme, jestli to pomůže. Pokud ano, ujistěte se, že autoanalyze zpracovává tuto tabulku častěji.

Dalším pokusem by bylo

SET default_statistics_target = 1000;

a poté ANALYZE jak je uvedeno výše. Pokud to pomůže, použijte ALTER TABLE pro zvýšení STATISTICS na hash_identity a sp_value_high sloupce.

Pokud ani to nepomůže a máte nejnovější verzi PostgreSQL, můžete zkusit rozšířenou statistiku :

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

Poté ANALYZE znovu tabulku a uvidíme, jestli to pomůže.

Pokud ani to nepomůže a odhady se nedaří získat správně, musíte zkusit jiný úhel:

CREATE INDEX ON hfj_res_link (target_resource_id, src_resource_id);

To by mělo výrazně urychlit skenování indexu a poskytnout vám dobré časy odezvy.

A konečně, pokud nic z výše uvedeného nemá žádný účinek, můžete pro tento dotaz použít krutou míru zákazu spojení vnořených smyček:

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



  1. Cizí klíč Mysql pomocí nejedinečného klíče - jak je to možné?

  2. Jak získám SQL*Plus k vytváření pohledů / tabulek s prázdným řádkem uprostřed příkazu create?

  3. Jak prohledávat více sloupců s prioritou v MySQL?

  4. Jak mohu snadno převést aplikaci Django z mySQL na PostgreSQL?