このクエリに役立つものはほんのわずかです:
-
実際のスキャンは問題ではないようですが(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を設定した場合の句 。