我有一個10米行的大桌子。我需要爲每一行獲得一些統計值。我有生成此值的函數,例如GetStatistic(uuid)
。該功能的工作原理很慢,結果值變化不常有,所以我在我的表中創建列Statistic
,並且一天一次執行這樣的查詢:Postgresql。可以在paralell中運行更新查詢嗎?
UPDATE MyTable SET Statistic = GetStatistic(ID);
而且在選擇查詢我使用列Statistic
不調用GetStatistic
功能。
的問題是,我的生產服務器有64個CPU和大量的內存,所以幾乎所有的數據庫可以被緩存到內存,但此查詢只使用一個CPU,需要2到3個小時來執行。
GetStatistic函數使用表,它在UPDATE查詢的所有執行期間都是不變的。我是否可以修改查詢來讓postgre同時使用所有可用的CPU來爲不同的行計算並列中的GetStatistic?
爲什麼使用函數,有沒有什麼不能用普通的SQL來完成的?該函數只需要當前行的值還是還包含其他數據源(:=表)?順便說一句:向我們展示功能。 – wildplasser
查看這個查詢的計劃,你會看到這個函數被稱爲10M次。也許用純SQL編寫它會更好,並且速度可能會更快。 –