Solo hay algunas cosas que ayudarán con esta consulta:
-
El escaneo real no parece ser el problema (tardó 42 segundos), pero si la tabla pudiera mantenerse en la RAM, podría ser más rápido.
-
Su principal problema es el tipo, que PostgreSQL ya paraleliza.
Hay algunas cosas que podrías ajustar:
-
Aumentar
work_memtanto como sea posible, lo que hará que la clasificación sea más rápida. -
Aumentar
max_worker_processes(esto requerirá un reinicio),max_parallel_workersymax_parallel_workers_per_gatherpara que se puedan usar más núcleos para la consulta.PostgreSQL tiene una lógica interna para calcular el número máximo de trabajadores paralelos que está listo para usar en una tabla:considerará tantos trabajadores paralelos como
registro3 (tamaño de la tabla /
min_parallel_table_scan_size)Puede obligarlo a usar más procesos que eso con:
ALTER TABLE ohlcv SET (parallel_workers = 20);Pero
max_parallel_workerssigue siendo el límite superior.
-
Si no hay eliminaciones ni actualizaciones en la tabla, y los datos se insertan en orden de clasificación, podría salirse con la suya simplemente omitiendo el ORDER BY cláusula, siempre que establezca synchronize_seqscans = off .