私は10m行の大きなテーブルを持っています。そして、私は各列の統計値を取得する必要があります。私はこの値を生成する関数を持っています、例えばGetStatistic(uuid)
です。この機能はありませんしばしば非常に遅く、結果値の変化を動作しますので、私は私のテーブルの列Statistic
を作成した、と一日一回、このようなクエリを実行します。GetStatistic
を呼び出すことなくPostgreSQL。パラレルで更新クエリを実行できますか?
UPDATE MyTable SET Statistic = GetStatistic(ID);
と私は列Statistic
を使用するselectクエリ内を機能。
問題は、私の本番サーバーには64のCPUとたくさんのメモリがあるため、ほぼすべてのDBをRAMにキャッシュすることができますが、このクエリはCPUを1つしか使用せず、2〜3時間の実行が必要です。
GetStatistic関数の使用テーブルで、UPDATEクエリのすべての実行中に定数です。使用可能なすべてのCPUを使用して、異なる行のパラレルで同時にGetStatisticを計算するためにpostgreを取得するクエリを変更できますか?
なぜ関数を使用するのですか、プレーンSQLでは実現できないものはありますか?関数は現在の行からの値のみを必要とするのか、それとも他のデータソース(:=テーブル)も含むのですか?ところで、私たちにその機能を教えてください。 – wildplasser
このクエリの計画をチェックすると、この関数が10M回呼ばれることがわかります。たぶん純粋なSQLで記述するほうがいいでしょうし、はるかに高速かもしれません。 –