このクエリに役立つものはほんのわずかです:
-
実際のスキャンは問題ではないようですが(42秒かかりました)、テーブルをRAMに保持できれば、より高速になる可能性があります。
-
あなたの主な問題は、PostgreSQLがすでに並列化しているソートです。
調整できることがいくつかあります:
-
work_mem
を増やします 可能な限り、並べ替えが速くなります。 -
max_worker_processes
を増やします (これには再起動が必要です)、max_parallel_workers
およびmax_parallel_workers_per_gather
より多くのコアをクエリに使用できるようにします。PostgreSQLには、テーブルに使用する準備ができている並列ワーカーの最大数を計算する内部ロジックがあります。これは、並列ワーカーの数と同じ数を考慮します
。log 3 (テーブルサイズ/
min_parallel_table_scan_size
)次の場合よりも多くのプロセスを使用するように強制できます:
ALTER TABLE ohlcv SET (parallel_workers = 20);
ただし、
max_parallel_workers
それでも上限です。
-
テーブルに削除と更新がなく、データが並べ替え順序で挿入されている場合は、ORDER BY
を省略するだけで問題を解決できます。 synchronize_seqscans = off
を設定した場合の句 。