Der er kun få ting, der vil hjælpe med denne forespørgsel:
-
Selve scanningen ser ikke ud til at være problemet (det tog 42 sekunder), men hvis tabellen kunne opbevares i RAM, ville det måske være hurtigere.
-
Dit hovedproblem er den slags, som PostgreSQL allerede paralleliserer.
Der er et par ting, du kan justere:
-
Forøg
work_mem
så meget som muligt, hvilket vil gøre sorteringen hurtigere. -
Forøg
max_worker_processes
(dette kræver en genstart),max_parallel_workers
ogmax_parallel_workers_per_gather
så flere kerner kan bruges til forespørgslen.PostgreSQL har en intern logik til at beregne det maksimale antal parallelarbejdere, den er klar til at bruge til en tabel:den vil betragte lige så mange parallelarbejdere som
log3 (tabelstørrelse /
min_parallel_table_scan_size
)Du kan tvinge den til at bruge flere processer end det med:
ALTER TABLE ohlcv SET (parallel_workers = 20);
Men
max_parallel_workers
stadig er den øvre grænse.
-
Hvis der ikke er nogen sletninger og opdateringer på tabellen, og dataene er indsat i sorteringsrækkefølge, kan du slippe afsted med bare at udelade synchronize_seqscans =off
.